Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-11-2005
Ivan_25 Ivan_25 is offline
Miembro
 
Registrado: oct 2005
Posts: 87
Poder: 19
Ivan_25 Va por buen camino
Problema con insert

Hola a tod@s!. Tengo un problemilla al hacer un insert. El codigo que tengo es el siguiente:

ADOQInsertar->SQL->Clear();
ADOQInsertar->SQL->Add("INSERT INTO candidatos(Nombre)");
ADOQInsertar->SQL->Add("VALUES("+ENombre->Text.Trim()+");");
cadena = ADOQInsertar->SQL->Text.Trim();
Edit1->Text = cadena;
ADOQInsertar->ExecSQL();
ADOQInsertar->Active = true;
FPrincipal->DBGCandidatos->DataSource = DSInsertar;

Al insertar me da un error que dice que ENombre no tiene valores por defecto (¿?¿?¿?¿?). Si inserto tambien el Id, que es la clave, me dice que no puede porque crearia valores duplicados, y sin embargo, ese id no esta en la base de datos. ¿Podeis ayudarme?
Responder Con Cita
  #2  
Antiguo 03-11-2005
Avatar de OSKR
OSKR OSKR is offline
Miembro
 
Registrado: nov 2004
Ubicación: San Cristóbal/Táchira/Venezuela
Posts: 389
Poder: 20
OSKR Va por buen camino
yo empezaria por
Código:
ADOQInsertar->SQL->Clear();
ADOQInsertar->SQL->Add("INSERT INTO candidatos(Nombre) VALUES("+ENombre->Text.Trim()+");");
cadena = ADOQInsertar->SQL->Text.Trim();
Edit1->Text = cadena;
ADOQInsertar->ExecSQL();
ADOQInsertar->Active = true;
FPrincipal->DBGCandidatos->DataSource = DSInsertar;
unir las lineas de la sentencia, ya q no recuerdo si el Add agrega al final del texto o agrega una nueva linea, otra cosa...no veo el Id, el primer error q mencionas es raro, pero antes de insertar yo me aseguraria q la longitud del ENombre->Text.Trim() fuera distinta de 0 xq sino estaria mandando una cadena nula.........ves ?, otra mas.........creo q deberias encerrar entre comillas o comillas dobles el nombre (xq supogo q es una cadena), seria algo asi....
Código:
ADOQInsertar->SQL->Add("INSERT INTO candidatos(Nombre) VALUES('"+ENombre->Text.Trim()+"');");
//o asi....
ADOQInsertar->SQL->Add("INSERT INTO candidatos(Nombre) VALUES(\""+ENombre->Text.Trim()+"\");");
dependiendo de tu BD, hay algunas q aceptan de las 2, suerte
__________________
Los Estados Unidos parecen destinados por la Providencia para plagar la América de miserias a nombre de la libertad."
Simón Bolívar
(Carta al Coronel Inglés Patricio Cambell 05/08/1829).

Última edición por OSKR fecha: 03-11-2005 a las 22:38:02.
Responder Con Cita
  #3  
Antiguo 03-11-2005
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
no se si sea porque es en Builder, pero siguiendo mi poco conocimiento de la matería: no logro entender porque al final de la secuencia SQL le agregas un punto y coma. Al menos a mi me parece extraño.
Código SQL [-]
Insert.... --etc
Values(...); -- punto y coma????? seguro?????

Cita:
Empezado por OSKR
no recuerdo si el Add agrega al final del texto o agrega una nueva linea
cada instruccción Add es una nueva línea en la instrucción SQL.

Coincido con el detalle de las comillas al momento de pasar el nombre...
__________________

Responder Con Cita
  #4  
Antiguo 04-11-2005
Ivan_25 Ivan_25 is offline
Miembro
 
Registrado: oct 2005
Posts: 87
Poder: 19
Ivan_25 Va por buen camino
No me funciona

He probado este codigo para insertar el Id, pero me dice que crearia campos duplicados y me da error, aunque sin embargo lo inserta en la base de datos:

String cadena;
FPrincipal->ADOQListacandidatos->SQL->Clear(
FPrincipal->ADOQListacandidatos->SQL->Add("INSERT INTO candidatos (Id) VALUES(\""+ECodigo->Text.Trim()+ "\")");
cadena = FPrincipal->ADOQListacandidatos->SQL->Text.Trim();
Edit1->Text = cadena;
FPrincipal->ADOQListacandidatos->ExecSQL();
FPrincipal->ADOQListacandidatos->Active = true;
FPrincipal->DBGCandidatos->DataSource = FPrincipal->DSListacandidatos;

¿Se os ocurre algo?
Responder Con Cita
  #5  
Antiguo 04-11-2005
Avatar de alt126
alt126 alt126 is offline
Miembro
 
Registrado: dic 2004
Posts: 171
Poder: 20
alt126 Va por buen camino
puess....

personalmente creo que es por el "ECodigo->Text"...., lo del ; esta bien. Esto es porque para pasar parametros a una consulta, no se puede meter en la cadena de la consulta un componente...solo se puede poner SQL!!!

para meter un parametro es asi:

Cita:
Datos->Consulta->SQL->Clear();
Datos->Consulta->SQL->Add("SELECT Campo1 FROM Tabla WHERE Campo2=:a;");
Datos->Consulta->Params->Items[0]->AsString = "lo que quieras";
...
Prueba eso a ver que tal. Porque el componente Edit ese que metes, yo creo que lo toma como una cadena de texto y no como un componente...de todas maneras te vuelvo a comentar, que las consultas, las pruebes antes en la BD, y cuando veas que es correcto lo que hace, la metas en codigo...te ahorraras muchos dolores de cabeza.

Un saludo

Antonio
Responder Con Cita
  #6  
Antiguo 04-11-2005
Ivan_25 Ivan_25 is offline
Miembro
 
Registrado: oct 2005
Posts: 87
Poder: 19
Ivan_25 Va por buen camino
Localizado el problema

El problema esta en el active:

FPrincipal->ADOQListacandidatos->Active = true;

Si lo quito lo inserta bien y no da fallo, pero el problema es que entonces al volver a mostrar el formulario principal no me muestra los registros, y si pongo el active me da fallo. ¿Como puedo solucionarlo?. Gracias por todo.
Responder Con Cita
  #7  
Antiguo 04-11-2005
Ivan_25 Ivan_25 is offline
Miembro
 
Registrado: oct 2005
Posts: 87
Poder: 19
Ivan_25 Va por buen camino
Lo he solucionado asi

ADOQInsertar->SQL->Clear();
ADOQInsertar->SQL->Add("INSERT INTO candidatos(Id) VALUES(\""+ECodigo->Text.Trim()+"\")");
FPrincipal->DSListacandidatos->DataSet = ADOQInsertar;
ADOQInsertar->ExecSQL();
//ADOQInsertar->Active = true; //Esta queda inactiva
FPrincipal->DSListacandidatos->DataSet = ADOQInsertar;
FPrincipal->ADOQListacandidatos->Active = true;
FPrincipal->DSListacandidatos->DataSet = FPrincipal->ADOQListacandidatos;
FPrincipal->ADOQListacandidatos->Close();

Y cuando cierro el formulario hago:

FPrincipal->ADOQListacandidatos->Open();

El problema que tengo ahora es que no se como hacer para insertar dos campos a la vez, es decir:

ADOQInsertar->SQL->Add("INSERT INTO candidatos(Id,Nombre) VALUES(\""+ECodigo->Text.Trim()+" Segundo campo \")");

porque he probado con \"," y todo eso me da fallo. Un saludo.
Responder Con Cita
  #8  
Antiguo 04-11-2005
Ivan_25 Ivan_25 is offline
Miembro
 
Registrado: oct 2005
Posts: 87
Poder: 19
Ivan_25 Va por buen camino
Solucionado

ADOQInsertar->SQL->Add("INSERT INTO candidatos(Id,Nombre) VALUES('"+ECodigo->Text.Trim()+"','"+ENombre->Text.Trim()+"')");

Gracias a tod@s
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 20:08:43.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi