 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
José Israel Invitado
|
Publicado: Mie 06 Ago, 2003 5:15 pm Asunto: C++ Builder e Interbase |
|
|
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
IBQuery1->SQL->Clear();
IBQuery1->SQL->Add("INSERT INTO SERVICIOS (CLAVE, DESCRIPCION)");
IBQuery1->SQL->Add("VALUES (Edit3->Text, Edit1->Text)");
IBQuery1->ExecSQL(); |
|
| Volver arriba |
|
 |
Invitado
|
Publicado: Jue 07 Ago, 2003 7:52 am Asunto: |
|
|
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 |
|
 |
XyVy Master


Registrado: 25 Ago 2002Mensajes: 557Ubicación: Murcia (España)
|
Publicado: Jue 07 Ago, 2003 2:23 pm Asunto: |
|
|
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 |
|
 |
Jose Israel Invitado
|
Publicado: Jue 07 Ago, 2003 6:15 pm Asunto: |
|
|
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?  |
|
| Volver arriba |
|
 |
XyVy Master


Registrado: 25 Ago 2002Mensajes: 557Ubicación: Murcia (España)
|
Publicado: Jue 07 Ago, 2003 9:11 pm Asunto: |
|
|
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 |
|
 |
Alfredo Invitado
|
Publicado: Jue 07 Ago, 2003 10:53 pm Asunto: Comillas y mas comillas |
|
|
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 |
|
 |
XyVy Master


Registrado: 25 Ago 2002Mensajes: 557Ubicación: Murcia (España)
|
Publicado: Jue 07 Ago, 2003 11:13 pm Asunto: |
|
|
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 |
|
 |
Jose Israel Invitado
|
Publicado: Jue 07 Ago, 2003 11:16 pm Asunto: Gracias |
|
|
| 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.  |
|
| Volver arriba |
|
 |
Jose Israel Invitado
|
Publicado: Jue 07 Ago, 2003 11:18 pm Asunto: Gracias Nuevamente |
|
|
Gracias nuevamente. Hay algun modo de contactarte?  |
|
| Volver arriba |
|
 |
XyVy Master


Registrado: 25 Ago 2002Mensajes: 557Ubicación: Murcia (España)
|
|
| Volver arriba |
|
 |
TOÑO Master

Registrado: 26 Ago 2002Mensajes: 223Ubicación: Madrid - España -
|
Publicado: Vie 08 Ago, 2003 1:53 pm Asunto: |
|
|
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 |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|