Ver la Versión Completa : problemas en delphi con campo autoincremental
Durbed
15-10-2004, 09:19:18
Uso delphi 7 e interbase6.5. En una tabla tengo un campo autoincremental, y al provarlo desde el IBExpert, funciona bien, pero en delphi al introducir datos mediante:
IBDatabase1.Insert;
IBDatabase.fieldbyName('Codigo').Value:=valor;
...
IBData1.post;
Si no le pongo tambien el campo clave me genera un erro la base, de que me falta el campo clave. Y digo yo que si lo resuelve la base, no deberia preocuparme del dichoso campo teniendo que darle yo el indice.
Gracias.
tcp_ip_es
15-10-2004, 09:46:48
creo que le tienes que pasar al campo el valor NULL.
Saludos, Tony
nicolasdom
15-10-2004, 16:43:42
Yo lo resolvi pasandole cualqueir valor. El tema es el siguiente:
En la base se te va a guardar bien el dato, pero en la tabla se te va a hacer una ensalada si le pones un codigo que ya existe. Moraleja, pasale un numero lo sufisientemente alto y que sepas que no esta en la tabala. Yo lo arregle asi
[codigo Delphi]
procedure TFormComprobantes.IBTable1AfterInsert(DataSet: TDataSet);
begin
Dataset.FieldValues['CODIGO_COMPROBANTE']:=9999;
end;
[/codigo Delphi]
Espero que te sirva.
JulioGO
15-10-2004, 23:40:24
Hola forofos:
Por lo que he leido lineas arriba, la cuestion es la siguiente:
- Tienes un campo autoincremental, que de seguro debe haber sido creado de la siguiente manera: CREATE TABLE MITABLA(NOMBRE_CAMPOAUTOINC not null, ...)
- Si es asi como se ha creado en el DataSet deberias poner esto en el procedure InserSQL: INSERT INTO MITABLA(DEMAS CAMPOS SIN TOMAR EN CUENTA EL CAMPO AUTOINCREMENTAL)
A mi me funciona, espero que a ti tambien.
Saludos.
Durbed
20-10-2004, 11:22:23
creo que le tienes que pasar al campo el valor NULL.
Saludos, Tony
He puesto:
IBTable1.FieldByName('CLAVE').Value := NULL;
y no funciona
procedure TFormComprobantes.IBTable1AfterInsert(DataSet: TDataSet);
begin
Dataset.FieldValues['CODIGO_COMPROBANTE']:=9999;
end; Asi tampoco funciona, porque en la tabla me inserta el 9999 como clave y la proxima vez que voy a insertar un registro me dice que como es clave primaria no se puede repetir y casca el programa.
- Tienes un campo autoincremental, que de seguro debe haber sido creado de la siguiente manera: CREATE TABLE MITABLA(NOMBRE_CAMPOAUTOINC not null, ...)
- Si es asi como se ha creado en el DataSet deberias poner esto en el procedure InserSQL: INSERT INTO MITABLA(DEMAS CAMPOS SIN TOMAR EN CUENTA EL CAMPO AUTOINCREMENTAL)
A mi me funciona, espero que a ti tambien.
Saludos
Esto no lo he provado, porque inserto mediante:
IBDatabase1.Insert;
IBDatabase.fieldbyName('Codigo').Value:=valor;
...
IBData1.post;
Pero sino me queda otra tendre que probar como dice JulioGo.
PD: El procedimiento IBTable1.InsertRecord(...); funciona bien?
Gracias
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.