Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Problemillas al intentar insertar registros (https://www.clubdelphi.com/foros/showthread.php?t=33112)

ilichhernandez 27-06-2006 21:45:17

Problemillas al intentar insertar registros
 
Holas a todos, bueno estoy tratando de leer un archivo de texto que tiene registros y estos a medida de irlos leyendo traspasarlos a una tabla de interbase. He intentado con varias variantes del siguiente código

Código Delphi [-]

procedure TForm1.dxButton1Click(Sender: TObject);
var
  openDialog : TOpenDialog;
  myFile : TextFile;
  estado : variant;
  text   : string;
  cadena,n1,n2 : String;
  n3 : integer;
  numinv  : boolean;
  vficha : integer;
  vnombre : string;
  vRut : string;
  vsueldo : integer;
  vdigvernum : integer;
  vdigverstr : string;
  begin 
  openDialog := TOpenDialog.Create(self);
  opendialog.InitialDir := 'F:\junio_2006.txt';
  openDialog.Options := [ofFileMustExist];
  openDialog.Filter :=
  'Archivos de texto|*.txt|Todos loa archivos|*.*';
  openDialog.FilterIndex := 2;
  if openDialog.Execute
  then
      begin
      LMDEdit5.Text := opendialog.FileName;
      end
      else ShowMessage('La operacion de apertura de archivo fue cancelada !!');
openDialog.Free;
Assignfile(myFile, LMDEdit5.text);
Reset(myFile);

while not Eof(myFile) do
  begin 
    vficha := 0;
    vnombre :='';
    vrut :='';
    ReadLn(myFile, n1);
    n2 := Trim(n1);
    n3 := length(n2);
    cadena := (Copy(n2, 1, 1));

    If (isinteger(cadena)) then
       begin
          If (n2<>'')and((n3=41)or(n3=42)or(n3=43)or(n3=9)or(n3=10)or(n3=11)) then
          begin
          if (n3>10) then
              begin
              vficha:=strtoint(trim(copy(n2,1,2)));
              delete(n2,1,3);
              trimleft(n2);
              n3 := length(n2);
              vrut := (copy(n2,n3-10,11));
              trim(vrut);
              n2 := copy(n2,1,29);
              vnombre := copy (n2,1,28);
               vnombre := n2;
                query1.close;
                query1.sql.Clear;
                query1.SQL.Add('Insert into tabla (ficha,nombre,rut,sueldo)');
                query1.sql.add('values(:nficha,:nnombre,:nrut,:nsueldo)');
                query1.ParamByName('nficha').AsInteger := vficha;
                query1.ParamByName('nnombre').asString  := vnombre;
                query1.parambyName('nrut').AsString := vrut;
                query1.ParamByName('nsueldo').AsInteger := vsueldo;
                query1.ExecSQL;
               

              //showmessage('ficha='+ inttostr(vficha) + ' nombre='+vnombre + ' rut=' + vrut);
              vficha := 0;
              vnombre:='';
              vrut := '';
              end;
         end;
        end;
   end; 
closefile(myFile);
end;

Como pueden ver, primero pido el archivo a leer, luego voy tomando los datos y los separo en las variables que luego quiero guardar en la tabla.

Las variables a guardar son ficha, nombre,rut y sueldo.

A Todos gracias de antemanos por sus consejos y ayudas.

JCarlosas 27-06-2006 22:49:01

Para dar una mejor idea de lo que te sucede creo que seria conveniente que explicaras que error te da o si es que simplemente no te inserta.
Seria bueno tambien que obtuvieras la cadena SQL ya completamente construida. Y nos la pusieras en el texto para poder analizarlo todo con mas detalles.
Saludos
Juan Carlos

ilichhernandez 28-06-2006 01:16:19

Esta es la cedena de insercion para el sql

Código Delphi [-]
                query1.close;
                query1.sql.Clear;
                query1.SQL.Add('Insert into tabla (ficha,nombre,rut,sueldo)');
                query1.sql.add('values(:nficha,:nnombre,:nrut,:nsueldo)');
                query1.ParamByName('nficha').AsInteger := vficha;
                query1.ParamByName('nnombre').asString  := vnombre;
                query1.parambyName('nrut').AsString := vrut;
                query1.ParamByName('nsueldo').AsInteger := vsueldo;
                query1.ExecSQL;

Tal vez exista una mejor manera de insertar ........

nemesio 28-06-2006 05:46:24

Revisaste con el Depurador (F8) que las variables estan tomando los valores de los campos del archivo texto?
A Vsueldo que valor le estas asignando?
Prueba colocar un Commit despues del EXecSQL

Suerte

Lepe 28-06-2006 11:21:44

Pues no estaría de más saber el error que te dá, o qué problemas tienes.

De momento veo varias insconsistencias:
preguntas si n3=9 ó n3=10, pero despues dices si n3>10 haz la inserción ¿?:confused: ¿para qué quieres esas 2 condiciones?

Saludos

ilichhernandez 28-06-2006 16:17:02

Cuando intento leer el archivo de textos me lanza el siguiente error

"General SQL error, arithmetic exception, numeric overflow, or string truncation"

He revisado el valor de las variables anteponiendo a la sentencia sql unos showmessage, y los valores de las variables son los correctos.....

O sea en la sentencia SQL debo tener el problema.... o tal vez la manera de ejecutar la insersion....

Ojala alguien me pueda ayudar a como resolverlo.... gracias de antemanos...

ilichhernandez 28-06-2006 18:06:28

Encontre el error, resulta que intentaba insertar una cadena de 11 caracteres en una campo de 10 entonces en ese punto se caia..... bueno gracias por todas las ayudas... siempre ayudan mucho....

Gracias !!!


La franja horaria es GMT +2. Ahora son las 09:02:13.

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