 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mar 05 Jun, 2007 10:14 am Asunto: ¿Cómo añadir registros en Firebird? |
|
|
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 |
|
 |
Buildero Master


Registrado: 23 Dic 2003Mensajes: 523Ubicación: Puebla, México
|
Publicado: Mar 05 Jun, 2007 3:21 pm Asunto: |
|
|
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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mar 05 Jun, 2007 6:19 pm Asunto: |
|
|
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 |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
|
| Volver arriba |
|
 |
ercea Ens

Registrado: 07 May 2007Mensajes: 48
|
Publicado: Mar 05 Jun, 2007 11:38 pm Asunto: |
|
|
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
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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mie 06 Jun, 2007 10:54 am Asunto: |
|
|
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 |
|
 |
|
|
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.
|