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ómo añadir registros en Firebird?

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: ¿Cómo añadir registros en Firebird? Responder citando

Lo más probable es que sea simple y llanamente de un error de concepto mio.

Estoy acostumbrado en las tablas Paradox a que cuando ejecuto Table1->Append() y el formulario contiene elementos DBEdit, por ejemplo, estos se ponen en blanco asumiendo el contenido del nuevo registro.

Sin embargo, si en un tabla Firebird hago Table1->Insert() o Table1->Append(), se me edita el último registro de la tabla (Insert) o el actual (Append) en vez de añadirse un registro en blanco. Según la ayuda Insert añade un nuevo registro vacío en la tabla (Inserts a new, empty record in the dataset) y Append debería hacer lo mismo al final de la tabla (Adds a new, empty record to the end of the dataset) pero no es así.

Tengo definida una base de datos Firebird con un TIBDatabase, un TIBTransaction y dos TIBTable debidamente conectados.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Que tal Angel, en teoría todo lo que comentas está bien. Puede ser que el problema vaya por otro lado, tal vez algún código asociado a cualquiera de los eventos que se disparan al hacer Append.

OnNewRecord
BeforeInsert
...

A simple vista y por lo que comentas no veo por donde pueda ir el erro.

Saludos!
_________________
Quien hace una pregunta teme parecer un ignorante durante cinco minutos, quien no pregunta se mantiene ignorante toda la vida.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Gracias por responder. Lo que comentas podría ser un posibilidad, pero el código lo tengo puesto en un OnClick de un botón:
Código:
void __fastcall TfTitulos::NuePelClick(TObject *Sender)
{
     Query->Close();
     Query->UnPrepare();
     Query->SQL->Text = "SELECT MAX(Registro) Registro FROM Peliculas";
     Query->Prepare();
     Query->Open();
     fTitulos->Tag = Query->FieldByName("Registro")->AsInteger + 1;
     fTitulos->Caption = "Nuestras películas - Registro núm. " + FormatFloat("##,##0", fTitulos->Tag);
     lNuevo = true;

     Peliculas->Append();
     Ficha->Enabled = true;
     DBEdit1->SetFocus();
}
//---------------------------------------------------------------------------

El query que hay montado es para sacar el número de registro, pero podría eliminarse definiendo ese campo de la base de datos como autoincremental.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Date una vuelta por la opcion de Tips y Trucos, en la parte de Generadores de ID, con InterBase o FireBird,
y recuerda usar el post,

Asi mismo es mucho mas sencillo usar el componente IBDataSet, que da muchas mas posibilidades, de trabajar.

https://cppbuilder.es/viewtopic.php?t=9544&highlight=genid
https://cppbuilder.es/viewtopic.php?t=9684&highlight=genid
https://cppbuilder.es/viewtopic.php?t=9953&highlight=genid

te dejo algunos enlaces, sobre el post anterior sobre la musica puedes enviarme el archivo de C y ver que se puede hacer para transferirlo en modo c++ Builder
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Si sirve de algo, me ha pasado varias veces con Paradox eso que comentas, por ejemplo en Onclick , entre otras cosas ,decia Table1->Append(); y mostraba el nuevo formulario con los dbedits y demás, y en vez de aparecerme en blanco, me aparecía el último registro que tenía en la tabla.... sinceramente no llegué a solucinarlo, salvo que borrar el formulario (el de los dbedits) y volver a crearlo, así en plan "borrador", por ejemplo con un dbedit, para ver si me ya salía en blanco, y en eses caso ponerlo como quería xD. Es una lata y no sé otro método, pero es lo que tuve que hacer Wink

Ahora estoy intentando aprender interbase y creo que me está pasando factura el haberme dedicado solamente a paradox ya que me está costando entederlo un poco... por lo que veo ya no es conveniente el Database Desktop no?, pero ¿hay otra herramienta para crear la base de datos o tengo que hacerlo desde comandos SQL que trae el propio Firebird?

En fin, seguiré leyendo documentación jeje, aunque me gustaría ver al menos algún mini programa de prueba (sobre todo para el tema de conectar el programa con la BD)

saludos!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Gracias a todos por las respuestas. ¡Solucionado el problema! Y la respuesta es la más tonta: N0o le decía al índice que era un registro nuevo.

Me explico. La definición de la tabla es esta:
Código:
CREATE TABLE Peliculas (Titulo VARCHAR(50), Registro SMALLINT, Disco SMALLINT, Orden SMALLINT, Anyo SMALLINT, Duracion SMALLINT, Director VARCHAR(50), Interpretes BLOB SUB_TYPE 1 SEGMENT SIZE 50, Genero VARCHAR(20), Caratula BLOB SUB_TYPE 0 SEGMENT SIZE 240, Impreso VARCHAR(1), Origen VARCHAR(1), Calidad VARCHAR(1), Espanol SMALLINT, Ingles SMALLINT, Otros SMALLINT, Subtitulos SMALLINT,  Novedad SMALLINT, PRIMARY KEY (Titulo, Registro))

¿Vale? Como veis en el índice están título y registro. Con el código que puse antes calculaba el nuevo valor de registro, ¡pero no le decía donde iba!
Código:
void __fastcall TfTitulos::NuePelClick(TObject *Sender)
{
     Query->Close();
     Query->UnPrepare();
     Query->SQL->Text = "SELECT MAX(Registro) Registro FROM Peliculas";
     Query->Prepare();
     Query->Open();
     fTitulos->Tag = Query->FieldByName("Registro")->AsInteger + 1;
     fTitulos->Caption = "Nuestras películas - Registro núm. " + FormatFloat("##,##0", fTitulos->Tag);
     lNuevo = true;

     Peliculas->Append();
     Peliculas->FieldValues["Registro"] = Query->FieldByName("Registro")->AsInteger + 1;
     Ficha->Enabled = true;
     DBEdit1->SetFocus();
}
//---------------------------------------------------------------------------

En cuanto he insertado la línea Peliculas->FieldValues["Registro"]..., todo resuelto. De todas formas, le echaré una ojeada a los enlaces que me ha sugerido César, que siempre hay que aprender cosas nuevas.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
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.