Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-11-2017
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: Jan 2007
Posts: 773
Poder: 12
Angel.Matilla Va por buen camino
Problema al grabar en FB

Antes que nada perdón por el tocho de código. Tengo este código que uso para grabar registros nuevos o actualizaciones en un tabla FB.
Código:
Query->Close();
if (lNuevo)
{
     Query->SQL->Text = "INSERT INTO Persona (Apellidos, Nombre, Nif, Sexo, F_nacim, Domicilio, Cpostal, Poblacion, Provincia, Profesion, "
                        "C_electronico, Telefono_1, Telefono_2, Telefono_3, Situacion, Correo, Lo1599, F_alta, N_afiliado, Afiliacion, "
                        "Junta, Referencia, PerPago, Forpago, Cuota, Iban, Cuenta, Bic, Observaciones, UsuMod, FecMod) VALUES (:Apellidos, "
                        ":Nombre, :Nif, :Sexo, :F_nacim, :Domicilio, :Cpostal, :Poblacion, :Provincia, :Profesion, :C_electronico, "
                        ":Telefono_1, :Telefono_2, :Telefono_3, :Situacion, :Correo, :Lo1599, :F_alta, :N_afiliado, :Afiliacion, :Junta, "
                        ":Referencia, :PerPago, :Forpago, :Cuota, :Iban, :Cuenta, :Bic, :Observaciones, :UsuMod, :FecMod)";
}
else
{
     Query->SQL->Text = "UPDATE Persona SET Apellidos = :Apellidos, Nombre = :Nombre, Nif = :Nif, Sexo = :Sexo, F_nacim = :F_nacim, "
                        "Domicilio = :Domicilio, Cpostal = :Cpostal, Poblacion = :Poblacion, Provincia = :Provincia, Profesion = :Profesion, "
                        "C_electronico = :C_electronico, Telefono_1 = :Telefono_1, Telefono_2 = :Telefono_2, Telefono_3 = :Telefono_3, "
                        "Situacion = :Situacion, Correo = :Correo, Lo1599 = :Lo1599, F_alta = :F_alta, N_afiliado = :N_afiliado, "
                        "Afiliacion = :Afiliacion, Junta = :Junta, Referencia = :Referencia, PerPago = :PerPago, ForPago = :ForPago, "
                        "Cuota = :Cuota, Iban = :Iban, Cuenta = :Cuenta, Bic = :Bic, Observaciones = :Observaciones, UsuMod = :UsuMod, "
                        "FecMod = :FecMod WHERE CodPrv = (SELECT Literal FROM Instalacion WHERE Etiqueta = 'Provincia') AND Codigo = :Codigo";
}

Query->ParamByName("Apellidos")->AsString = Apellidos->Text;
Query->ParamByName("Nombre")->AsString    = Nombre->Text;
try
{
     Query->ParamByName("Codigo")->AsInteger = GroupBox1->Tag;
}
catch(...)
{
}
Query->ParamByName("Nif")->AsString           = Nif->Text;
Query->ParamByName("Sexo")->AsInteger         = Sexo->ItemIndex;
Query->ParamByName("F_nacim")->AsDateTime     = StrToDateDef(F_nacim->Text, dFechaNula) > dFechaNula ? StrToDate(F_nacim->Text) : NULL;
Query->ParamByName("Domicilio")->AsString     = Domicilio->Text;
Query->ParamByName("Cpostal")->AsString       = Cpostal->Text;
Query->ParamByName("Poblacion")->AsInteger    = Poblacion->Tag < 1 ? 1 : Poblacion->Tag;
Query->ParamByName("Provincia")->AsInteger    = Provincia->ItemIndex < 0 || (int)(TObject*)Provincia->Items->Objects[Provincia->ItemIndex] < 1 ? 99 : (int)(TObject*)Provincia->Items->Objects[Provincia->ItemIndex];
Query->ParamByName("Profesion")->AsInteger    = Profesion->ItemIndex < 0 || (int)(TObject*)Profesion->Items->Objects[Profesion->ItemIndex] < 1 ? 1 : (int)(TObject*)Profesion->Items->Objects[Profesion->ItemIndex];
Query->ParamByName("C_electronico")->AsString = C_electronico->Text;
Query->ParamByName("Telefono_1")->AsString    = Telefono_1->Text.Trim();
Query->ParamByName("Telefono_2")->AsString    = Telefono_2->Text.Trim();
Query->ParamByName("Telefono_3")->AsString    = Telefono_3->Text.Trim();
Query->ParamByName("Situacion")->AsInteger    = Situacion->ItemIndex < 0 || (int)(TObject*)Situacion->Items->Objects[Situacion->ItemIndex] < 1 ? 1 : (int)(TObject*)Situacion->Items->Objects[Situacion->ItemIndex];
Query->ParamByName("Correo")->AsInteger       = Correo->Checked;
Query->ParamByName("Lo1599")->AsInteger       = Lo1599->Checked;
Query->ParamByName("F_alta")->AsDateTime      = StrToDateDef(F_alta->Text, dFechaNula) > dFechaNula ? StrToDate(F_alta->Text) : NULL;
Query->ParamByName("N_afiliado")->AsInteger   = StrToIntDef(N_afiliado->Text, 0);
Query->ParamByName("Afiliacion")->AsInteger   = Afiliacion->ItemIndex < 0 || (int)(TObject*)Afiliacion->Items->Objects[Afiliacion->ItemIndex] < 1 ? 1 : (int)(TObject*)Afiliacion->Items->Objects[Afiliacion->ItemIndex];
Query->ParamByName("Junta")->AsInteger        = Junta->ItemIndex < 0 || (int)(TObject*)Junta->Items->Objects[Junta->ItemIndex] < 1 ? 1 : (int)(TObject*)Junta->Items->Objects[Junta->ItemIndex];
Query->ParamByName("Referencia")->AsString    = Referencia->Text;
Query->ParamByName("PerPago")->AsInteger      = PerPago->ItemIndex < 0 || (int)(TObject*)PerPago->Items->Objects[PerPago->ItemIndex] < 1 ? 1 : (int)(TObject*)PerPago->Items->Objects[PerPago->ItemIndex];
Query->ParamByName("Forpago")->AsInteger      = ForPago->ItemIndex < 0 || (int)(TObject*)ForPago->Items->Objects[ForPago->ItemIndex] < 1 ? 1 : (int)(TObject*)ForPago->Items->Objects[ForPago->ItemIndex];
Query->ParamByName("Cuota")->AsFloat          = StrToFloatDef(StringReplace(Cuota->Text, "€", "", oReplace).Trim(), 0);
if (UpperCase(ForPago->Text) == "BANCO")
{
     Iban->Text = StringReplace(Iban->Text, " ", "", oReplace);
     if (isalpha(Iban->Text.c_str()[0]) && isalpha(Iban->Text.c_str()[1]))
     {
          Query->ParamByName("Iban")->AsString   = Iban->Text.SubString(1, 4);
          Query->ParamByName("Cuenta")->AsString = Iban->Text.SubString(5, Iban->Text.Length());
     }
     else
     {
          Query->ParamByName("Iban")->AsString   = "";
          Query->ParamByName("Cuenta")->AsString = Iban->Text;
     }
     if (!Bic->ReadOnly)
          Query->ParamByName("Bic")->AsString = Bic->Text;
     else
          Query->ParamByName("Bic")->AsString = "";
}
else
{
     Query->ParamByName("Iban")->AsString       = "";
     Query->ParamByName("Cuenta")->AsString     = "";
     Query->ParamByName("Bic")->AsString        = "";
}
Query->ParamByName("Observaciones")->Value = Observaciones->Text;
Query->ParamByName("UsuMod")->AsString     = NombreUser;
Query->ParamByName("FecMod")->AsDateTime   = Now();

try
{
     Query->ExecSQL();
     Query->Transaction->Commit();
}
catch(...)
{
     Mensaje(-1, "Se ha producido un error en la grabación del registro.", "Volver");
     Query->Transaction->Rollback();
}
Como véis en ambos querys no están exactamente los mismos parámetros ya que al grabar una ficha nueva a través de un generador y trigger añado el campo codigo, que al actualizar la ficha ya existe.

Hasta ayer mismo el primer try...catch que hay
Código:
try
{
     Query->ParamByName("Codigo")->AsInteger = GroupBox1->Tag;
}
catch(...)
{
}
estaba funcionando a la perfección y cuando era un INSERT se saltaba la línea.

Ayer, de repente y creo que sin haber tocado absolutamente nada de ese código, al pasar por esa línea concreta saltaba el mensaje de error que hay al final, en el try...catch que envuelve al ExecSQL. Me preocupa porque si he modificado algo en las especificaciones genéricas del proyecto puede que afecte a todos los INSERT/UPDATE del mismo y deben ser como unos 200.
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problema al grabar con UNION 2 TABLAS pmtzg Firebird e Interbase 11 18-08-2011 19:53:38
Problema para grabar en access novato03 Conexión con bases de datos 5 17-10-2007 15:53:06
Problema (básico?) editar-grabar registro pepitu Tablas planas 2 21-09-2005 11:34:40
Problema al grabar muxos registros en 1 detalle User_Baja_2 Conexión con bases de datos 2 05-06-2003 19:52:51


La franja horaria es GMT +2. Ahora son las 12:19:01.


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