Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

C++ Builder e Interbase

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: C++ Builder e Interbase Responder citando

Tengo el siguiente problema, quien me ayuda a resolverlo?
ME URGE, es para un programa que tengo que entregar en la escuela
Soy novato en esto, y quiero aprender
Embarassed Question Idea

IBQuery1->SQL->Clear();
IBQuery1->SQL->Add("INSERT INTO SERVICIOS (CLAVE, DESCRIPCION)");
IBQuery1->SQL->Add("VALUES (Edit3->Text, Edit1->Text)");
IBQuery1->ExecSQL();
Volver arriba
Mensaje    Asunto: Responder citando

Bueno, tal y como veo la sentencia SQL, quieres introducir los valores que hay en Edit3 y Edit1 en la tabla.
Tal como tienes definido el segundo Add el string te queda literalmente de la forma que tu has escrito y lo que quieres es leere sus valores.
Prueba así:
IBQuery1->SQL->Add("VALUES ("+Edit3->Text+","+Edit1->Text+")");

De esta manera si Edit3=2 y Edit1=Cocacola, te queda:

"VALUES (2,Cocacola)"

Espero que te sirva.
Salu2.
Volver arriba
Mensaje    Asunto: Responder citando

El ejemplo de Invitado está bien, pero puede tener un ligero problema hay que tener en cuenta las comillas para los campos de tipo CHAR o VARCHAR, luego te sugiero lo siguiente.

1ª Solución: Uso de comillas dobles, por lo tanto te hará falta usar la \ para evitar que se tome como fin de cadena

Código:

IBQuery1->SQL->Clear();
IBQuery1->SQL->Add("INSERT INTO SERVICIOS (CLAVE, DESCRIPCION)");
IBQuery1->SQL->Add("VALUES (" + Edit3->Text + ", \"" + Edit1->Text + "\")");
IBQuery1->Prepare();
IBQuery1->ExecSQL();


2ª Solucion, en su defecto: El uso de la comilla simple

Código:

IBQuery1->SQL->Clear();
IBQuery1->SQL->Add("INSERT INTO SERVICIOS (CLAVE, DESCRIPCION)");
IBQuery1->SQL->Add("VALUES (" + Edit3->Text + ", '" + Edit1->Text + "')");
IBQuery1->Prepare();
IBQuery1->ExecSQL();


Con este ejemplo he supuesto que clave por ejemplo es de tipo INTEGER y Descripción es del tipo VARCHAR. Me estoy refiriendo logicamente a los campos de la tabla.

Como ves también te he puesto la sentencia IBQuery1->Prepare(), segun Builder es util llamarla cuando tenemos sentencias SQL que son compuestas de varias lineas como este caso, para preparar la sentencia a ejecutar.

Ciao y suerte.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Ya intente lo que me dijiste, pero nada de nada, no sale, me dice que hay un EOF en el string

IBQuery1->SQL->Add("INSERT INTO SERVICIOS (CLAVE, DESCRIPCION, COSTO)");
IBQuery1->SQL->Add("VALUES (" + Edit3->Text + ", \"" + Edit1->Text + ", \"" + Edit2->Text + "\")");
IBQuery1->Prepare();
IBQuery1->ExecSQL();

ahora, que hago? Rolling Eyes Shocked
Volver arriba
Mensaje    Asunto: Responder citando

Prueba a usar el segundo metodo que es el que yo suelo utilizar.
En esta nueva consulta prueba lo que viene al final, pero lee atentamente lo de acontinuación para que no te vuelva a pasar.

Has tenido unos fallos de ortografía SQLiana además debes tener clara una cosa, las comillas o comillas simples se utilizan solo para ciertos campos, nunca para los INTEGER, FLOAT, NUMBER, etc. Las comillas se utilizan para los CHAR, VARCHAR, DATES, TIMES, etc.

OK ?

Luego, primero a tener en cuenta:

1º debes imaginarte la consulta fuera del Builder para no obviar ninguna comilla.

2º Los campos de tipo INTEGER, FLOAT, NUMBER, etc van sin comillas.

3º Los campos de tipo CHAR, VARCHAR, TIME, DATE, etc van entre comillados, ya sea con comillas simples o dobles.

Luego teniendo en cuenta esto y viendo tu consulta lo primero que debemos pensar es en que tipo de dato es cada campo.

Supongamos que CLAVE y COSTO son INTEGER y que DESCRIPCION es del tipo VARCHAR.

Entonces DESCRIPCION debe ir entrecomillado los demás campos no.
Luego la consulta fuera del Builder sería:
INSERT INTO SERVICIOS (CLAVE, DESCRIPCION, COSTO)
VALUES (34, "MARIA FONTANEDA", 1500);


Estamos suponiendo una consulta real con datos, ahora para transformarla al Builder y teniendo en cuenta los tipos de campos, haremos:

Código:

IBQuery1->SQL->Add("INSERT INTO SERVICIOS (CLAVE, DESCRIPCION, COSTO) ");
IBQuery1->SQL->Add("VALUES (" + Edit3->Text + ", '" + Edit1->Text + "', " + Edit2->Text + ")");
IBQuery1->Prepare();
IBQuery1->ExecSQL();


Te recuerdo que despues de cada campo va en la consulta va una coma la cual no puedes obviar y si tienes un campo entrecomillado, debes tener cuidado con las comas, no te comas una comilla, antes de la coma.

Te sugiero también que para hacer tu programa más legible le cambies los nombres de los campos Edit1, Edit2 y Edit3, la propiedad NAME en el Inspector de Objectos, yo suelo utilizar la politica de poner delante una o dos letras con el tipo de componente. Por ejemplo mi consulta hubiera sido algo así:

Código:

IBQ_Consulta->SQL->Add("INSERT INTO SERVICIOS (CLAVE, DESCRIPCION, COSTO) ");
IBQ_Consulta->SQL->Add("VALUES (" + E_Clave->Text + ", '" + E_Descripcion->Text + "', " + E_Costo->Text + ")");
IBQ_Consulta->Prepare();
IBQuery1->ExecSQL();


Entre medias del tipo de componente y el nombre a veces también suelo poner unas iniciales para el formulario del que depende, ejemplo, si el formulario es Ventas por Cliente, los Edits los llamaría así:

E_VC_Clave, E_VC_Descripcion, E_VC_Costo, así sabes más o menos el tipo de componente y el formulario al que pertenecen.

Ciao, y suerte.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Comillas y mas comillas Responder citando

Hola, debes tener en cuenta que la propiedad text de los edits es precisamente eso texto, y que la query es tambien de texto, por lo cual debes intentar que tu codigo escriba una sentencia entendible para IB y el compílador simultaneamente.

IBQuery1->SQL->Clear();
IBQuery1->SQL->Add("INSERT INTO SERVICIOS (CLAVE, DESCRIPCION)");
IBQuery1->SQL->Add("VALUES (" ' "+ Edit3->Text + " ', ' " + Edit1->Text + " ') ");
IBQuery1->Prepare();
IBQuery1->ExecSQL();

He separado las comillas simples de las otras para mayor claridad, esto no afecta el desempeño.
Espero haberte sido util.
Volver arriba
Mensaje    Asunto: Responder citando

Lo que dice Alfredo es correcto puedes separarlas pero con cuidado, pues puedes estar introduciendo espacios en los campos. Alfredo las ha separado simplemente para claridad, pero OJO que no debes separarlas cuando lo hagas sino introduciras espacios.

Repito que hay que tener en cuenta el tipo de los campos, pues hay campos que requieren comillas y campos que no.

Ciao.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Gracias Responder citando

XyVy escribió:
Prueba a usar el segundo metodo que es el que yo suelo utilizar.
En esta nueva consulta prueba lo que viene al final, pero lee atentamente lo de acontinuación para que no te vuelva a pasar.

Has tenido unos fallos de ortografía SQLiana además debes tener clara una cosa, las comillas o comillas simples se utilizan solo para ciertos campos, nunca para los INTEGER, FLOAT, NUMBER, etc. Las comillas se utilizan para los CHAR, VARCHAR, DATES, TIMES, etc.

OK ?

Luego, primero a tener en cuenta:

1º debes imaginarte la consulta fuera del Builder para no obviar ninguna comilla.

2º Los campos de tipo INTEGER, FLOAT, NUMBER, etc van sin comillas.

3º Los campos de tipo CHAR, VARCHAR, TIME, DATE, etc van entre comillados, ya sea con comillas simples o dobles.

Luego teniendo en cuenta esto y viendo tu consulta lo primero que debemos pensar es en que tipo de dato es cada campo.

Supongamos que CLAVE y COSTO son INTEGER y que DESCRIPCION es del tipo VARCHAR.

Entonces DESCRIPCION debe ir entrecomillado los demás campos no.
Luego la consulta fuera del Builder sería:
INSERT INTO SERVICIOS (CLAVE, DESCRIPCION, COSTO)
VALUES (34, "MARIA FONTANEDA", 1500);


Estamos suponiendo una consulta real con datos, ahora para transformarla al Builder y teniendo en cuenta los tipos de campos, haremos:

Código:

IBQuery1->SQL->Add("INSERT INTO SERVICIOS (CLAVE, DESCRIPCION, COSTO) ");
IBQuery1->SQL->Add("VALUES (" + Edit3->Text + ", '" + Edit1->Text + "', " + Edit2->Text + ")");
IBQuery1->Prepare();
IBQuery1->ExecSQL();


Te recuerdo que despues de cada campo va en la consulta va una coma la cual no puedes obviar y si tienes un campo entrecomillado, debes tener cuidado con las comas, no te comas una comilla, antes de la coma.

Te sugiero también que para hacer tu programa más legible le cambies los nombres de los campos Edit1, Edit2 y Edit3, la propiedad NAME en el Inspector de Objectos, yo suelo utilizar la politica de poner delante una o dos letras con el tipo de componente. Por ejemplo mi consulta hubiera sido algo así:

Código:

IBQ_Consulta->SQL->Add("INSERT INTO SERVICIOS (CLAVE, DESCRIPCION, COSTO) ");
IBQ_Consulta->SQL->Add("VALUES (" + E_Clave->Text + ", '" + E_Descripcion->Text + "', " + E_Costo->Text + ")");
IBQ_Consulta->Prepare();
IBQuery1->ExecSQL();


Entre medias del tipo de componente y el nombre a veces también suelo poner unas iniciales para el formulario del que depende, ejemplo, si el formulario es Ventas por Cliente, los Edits los llamaría así:

E_VC_Clave, E_VC_Descripcion, E_VC_Costo, así sabes más o menos el tipo de componente y el formulario al que pertenecen.

Ciao, y suerte.



Gracias por tus consejos, y gracias por ayudarme.
Un agradecimiento tambien para Alfredo. Gracias por tomarse la molestia de esclarecer mi duda. Laughing
Volver arriba
Mensaje    Asunto: Gracias Nuevamente Responder citando

Gracias nuevamente. Hay algun modo de contactarte? Razz
Volver arriba
Mensaje    Asunto: Responder citando

Si es a mí, pues xyvy_hormigas@msn.com (Creo recordar)!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

HOLA:

Perdonaz que me entremeta en tan animada charla, pero estais obviando que si deseais introducir registros via interbase debeis utilizar el componente IBDataSet en lugar del IBQuery, el rendimiento es notablemente muy superior.


By.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.