FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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; 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)+')'; Código:
for i:=2 to lista.Count-1 do fvUIBQuery1.Params.ByNameAsVariant[lista[i]]:=adoquery1.FieldByName(lista[i]).AsVariant; [Error] Migracion.pas(134): E2129 Cannot assign to a read-only property Alguna idea de como puedo resolver esto? Mil gracias |
#2
|
||||
|
||||
Mirá si existe ParamByName('xx').Value.
Saludos.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#3
|
|||
|
|||
lo mas parecido que encontre fue esto
Código:
fbQuery.Params.Values['xxx']:='hola'; aunque se me ocurre otra idea, solo necesito saber de que tipo es un determinado campo de una tabla dbf, si puedo obtenerlo creo que podre solucionar esto con un CASE, seguire intentando muchas gracias jachguate |
|
|
|