Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Tablas planas (https://www.clubdelphi.com/foros/forumdisplay.php?f=20)
-   -   Problema registro vacio (https://www.clubdelphi.com/foros/showthread.php?t=94493)

igamerpc 05-03-2020 11:48:57

Problema registro vacio
 
Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
  archivo: String;
  cod1  : Cardinal;
  nom: string;
begin
FCountRec:=0;
While Not MOD.Tabla2.Eof do
      Begin
        cod1:=MOD.Tabla2.fieldbyName('CODIGO').Value;
        nom:=MOD.Tabla2.fieldbyName('NOMBRE').Value;
Insertar_Registro_Tabla_1('archivo', cod1, FCountRec, Sender);
        CFG.MOD.Tabla2.Next;
   end;
memo1.lines.add(format('Se insertaron %d registros',[FCountRec]));
end;

procedure TForm1.Insertar_Registro_Tabla_1(NTabla:String; cod1:cardinal; nom:string; var aCont: Integer; Sender: TObject);
begin
   If MOD.Conexion.Connected =False Then
       MOD.Conexion.Connected:=True;

MOD.Tabla1.TableName:=NTabla;
    MOD.Tabla1.Active:=True;

 MOD.MyCommand1.SQL.Clear;
    MOD.MyCommand1.sql.Add('INSERT INTO '+NTabla+'(CODIGO,NOMBRE) VALUES(:Codigo,:Nombre)');
    MOD.MyCommand1.ParamByName('CODIGO').Value:=cod1;
    MOD.MyCommand1.ParamByName('NOMBRE').Value:=nom;
Try
    MOD.MyCommand1.Execute;
    Inc(aCont);

   Except

End;
   MOD.Tabla1.Refresh;
end;
Cuando la tabla viejo tiene registros vacios. Al insertar a la tabla nuevo se para.

¿Como se hace cuando el registro vacio se debe ignorar para no insertar el registro?

Casimiro Notevi 05-03-2020 13:01:36

...

kuan-yiu 05-03-2020 14:25:28

Revisa que tengan datos. Algo así:
Código Delphi [-]
While Not MOD.Tabla2.Eof do
Begin
   cod1:=MOD.Tabla2.fieldbyName('CODIGO').Value;
   nom:=MOD.Tabla2.fieldbyName('NOMBRE').Value;
// condicional que solo graba cuando tienes algo
   if (cod1<>'')and(nom<>'') then
     Insertar_Registro_Tabla_1('archivo', cod1, FCountRec, Sender);
   CFG.MOD.Tabla2.Next;
end;

igamerpc 05-03-2020 17:00:39

Cuando una fila que esta vacia o null se para el programa. No salta la fila.
Lo comprobe que tu hiciste y me sale eso:

Me sale error "Could not converter variant of type (Null) into type (String)".
y tambien se para el programa.

igamerpc 05-03-2020 17:16:31

Creo ya he conseguido era eso:
NullStrictConvert:=false;

kuan-yiu 06-03-2020 08:18:48

Cita:

Empezado por igamerpc (Mensaje 536114)
Cuando una fila que esta vacia o null se para el programa. No salta la fila.
Lo comprobe que tu hiciste y me sale eso:

Me sale error "Could not converter variant of type (Null) into type (String)".
y tambien se para el programa.

Cierto, simplemente añadí una condición a tu código para indicar que así se evita ese error. Para ser estrictos creo que esta es la condición más adecuada, aunque yo en estos casos los datos de entrada ya los cribo antes de llegar aquí, en la propia query (pocas veces trabajo directamente con tablas).
Código Delphi [-]
While Not MOD.Tabla2.Eof do
Begin
// condicional que solo graba cuando tienes algo
   if (not MOD.Tabla2.fieldbyName('CODIGO').isNull)and(not MOD.Tabla2.fieldbyName('NOMBRE').isNull) then
   begin
      cod1:=MOD.Tabla2.fieldbyName('CODIGO').Value;
      nom:=MOD.Tabla2.fieldbyName('NOMBRE').Value;
      Insertar_Registro_Tabla_1('archivo', cod1, FCountRec, Sender);
   end;
   CFG.MOD.Tabla2.Next;
end;

igamerpc 09-03-2020 09:36:55

Perfecto esta me funciono bien. :D


La franja horaria es GMT +2. Ahora son las 03:31:44.

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