Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-11-2005
AbcXxx AbcXxx is offline
Miembro
 
Registrado: jun 2003
Posts: 50
Poder: 21
AbcXxx Va por buen camino
Parametros sql genericos

buen dia

estoy migrando tablas dbf a firebird y no utilizo ninguna utilidad porque quiero filtrar algunos campos y registros originales en el proceso, es por eso que estoy montando una aplicacion que lo haga

utilizo ado para acceder a las dbf y uib para acceder a firebird con delphi 2005

la duda es esta

cuando empece a trabajar con una sola tabla todo funcionaba bien, formaba una sentencia sql 'insert into articulos (a,b,etc...) values (:a,:b,:etc...)' e iba recorriendo la tabla dbf y asignando los valores de los parametros de la siguiente manera

Código:
  with fbQuery.Params do begin
    ByNameAsString['art_id']:=adoquery1.FieldByName('art_id').AsString;
    ByNameAsString['fab_id']:=adoquery1.FieldByName('fab_id').AsString;
    ByNameAsSmallint['alm_id']:=ADOQuery1.FieldByName('alm_id').AsInteger;
    ByNameAsString['fab_descr']:=ADOQuery1.FieldByName('fab_descr').AsString;
    ByNameAsString['art_descr']:=ADOQuery1.FieldByName('art_descr').AsString;
    ByNameAsCurrency['art_prec']:=ADOQuery1.FieldByName('art_prec').AsCurrency;
    ByNameAsCurrency['art_pp']:=ADOQuery1.FieldByName('art_pp').AsCurrency;
    ByNameAsCurrency['art_exist']:=ADOQuery1.FieldByName('art_exist').AsCurrency;
    ByNameAsCurrency['art_ucosto']:=ADOQuery1.FieldByName('art_ucosto').AsCurrency;
    ByNameAsString['art_nod']:=ADOQuery1.FieldByName('art_nod').AsString;
    ByNameAsCurrency['art_costoe']:=ADOQuery1.FieldByName('art_costoe').AsCurrency;
    ByNameAsCurrency['art_costop']:=ADOQuery1.FieldByName('art_costop').AsCurrency;
    ByNameAsCurrency['art_cospes']:=ADOQuery1.FieldByName('art_cospes').AsCurrency;
    ByNameAsString['art_apdesc']:=ADOQuery1.FieldByName('art_apdesc').AsString;
    ByNameAsString['art_obser1']:=adoquery1.FieldByName('art_obser1').AsString;
    ByNameAsString['art_inter1']:=adoquery1.FieldByName('art_inter1').AsString;
    ByNameAsString['art_inter2']:=adoquery1.FieldByName('art_inter2').AsString;
  end;
  fbTrans.StartTransaction;
ahora lo quiero hacer generico para cualquier tabla que le asigne mediante un stringlist como sigue
Código:
with lista do
begin
Clear;
Add('ARTICUL');  //tabla dbf
Add('ARTICULOS');  //tabla firebird
Add('ART_ID');  //campos a copiar
Add('FAB_ID');
Add('ALM_ID');
Add('FAB_DESCR');
Add('ART_DESCR');
Add('ART_PREC');
Add('ART_PP');
Add('ART_EXIST');
Add('ART_UCOSTO');
Add('ART_NOD');
Add('ART_COSTOE');
Add('ART_COSTOP');
Add('ART_COSPES');
Add('ART_APDESC');
Add('ART_OBSER1');
Add('ART_INTER1');
Add('ART_INTER2');
end;

strSQL:='insert into '+lista[1]+' (';
for i:=2 to lista.Count-1 do
  strSQL:=strSQL+lista[i]+', ';
strSQL:=LeftStr(strSQL,Length(strSQL)-2)+') values (:';
for i:=2 to lista.Count-1 do
  strSQL:=strSQL+lista[i]+', :';
strSQL:=LeftStr(strSQL,Length(strSQL)-3)+')';
todo muy bien hasta aqui, el problema se presento cuando quise asignarle los valores a los parametros, quise hacer algo como esto
Código:
  for i:=2 to lista.Count-1 do
    fvUIBQuery1.Params.ByNameAsVariant[lista[i]]:=adoquery1.FieldByName(lista[i]).AsVariant;
que me genera un error
[Error] Migracion.pas(134): E2129 Cannot assign to a read-only property

Alguna idea de como puedo resolver esto?

Mil gracias
Responder Con Cita
 



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


La franja horaria es GMT +2. Ahora son las 14:22:39.


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
Copyright 1996-2007 Club Delphi