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

Respuesta
 
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
  #2  
Antiguo 09-11-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
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
Responder Con Cita
  #3  
Antiguo 10-11-2005
AbcXxx AbcXxx is offline
Miembro
 
Registrado: jun 2003
Posts: 50
Poder: 21
AbcXxx Va por buen camino
lo mas parecido que encontre fue esto
Código:
fbQuery.Params.Values['xxx']:='hola';
pero me arrojo el mismo mensaje de error, 'propiedad de solo lectura'

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
Responder Con Cita
Respuesta



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 05:40:35.


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