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 21-05-2012
river_1 river_1 is offline
Miembro
 
Registrado: may 2010
Posts: 55
Poder: 15
river_1 Va por buen camino
Exclamation Error el actualizar datos en tablas DBF

Buenas a todos necesito ayuda con un error.
Explico: Estoy con Delphi 7 y me conecto a una BD de FoxPro(*.DBF) por medio de los componentes ADO que trae Delphi, el ADO lo conecto por medio de un ODBC de windows.Ya tengo otros programas que se cuelgan muy bien de esas BD y extraigo informacion para hacer reportes a la medida de mis clientes, en esta ocasion y por primera vez necesito actualizar registros en la BD.
La informacion actualizada la tengo un una BD de Acces y de alli busco el registro en la tabla DBF para actualizar algunos campos.
El codigo que uso para hacerlo es el siguiente:

Código Delphi [-]
  TBLPRODMDB.First;
  WHILE NOT TBLPRODMDB.Eof DO
  BEGIN
    IF TBLPRODDBF.Locate('CCODIGOP01',TblProdMDBCCODIGOP01.Value,[]) THEN
    BEGIN
      TBLPRODDBF.Edit;
      TblProdDBFccontrol01.Value:=1;
      IF TBLUM.Locate('CNOMBREU01',TblProdMDBCIDUNIDA01.Value,[]) THEN
         TblProdDBFcidunida01.value:=tBLumcidunidad.value;
      TBLPRODDBF.Post;
      TBLPRODMDB.NEXT;
    END;
  END;
  SHOWMESSAGE('Proceso Terminado'); 
end;

El error que me sale me dice de manera general: "Statement too long" y es al darle el POST a la tabla.
De hecho no siquiera me deja poner el 1 del campo TblProdDBFccontrol01.
Alguien ha modificado tablas DBF con Delphi?
Gracias...

Última edición por ecfisa fecha: 21-05-2012 a las 07:09:56. Razón: Corregir problema de etiquetas en Interfaz mejorada
Responder Con Cita
  #2  
Antiguo 23-05-2012
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
El mensaje de error lo dice claramente: "Statement too long". La única solución (creo) sería recortarla de algún modo, pero para eso habría que ver cómo es la línea en concreto. El problema es que no sé cómo conseguir ver esa línea. Supongo que TBLPRODDBF tendrá alguna propiedad como "text" o "code" o algo así y mostrarla antes del "post" a ver qué va a enviar..
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #3  
Antiguo 24-05-2012
river_1 river_1 is offline
Miembro
 
Registrado: may 2010
Posts: 55
Poder: 15
river_1 Va por buen camino
Bueno ya aligere un poco el codigo, lo que hice fue mejor importar a una tabla DBF los datos que necesito , pense que estando en el mismo entorno de BD no iba a tener problema y pues si lo tengo , el codigo quedo asi:

Código Delphi [-]
tblact.First;
 while not tblact.Eof do
  begin
   IF TBLPROD.Locate('CCODIGOP01',TblActcodigo_pro.Value,[]) THEN
    BEGIN
     TBLPROD.Edit;
     TblProdcidunida01.Value:=TblActunidad_bas.Value;
     TBLPROD.Post;
    end;
 end;
   SHOWMESSAGE('Proceso Terminado');
end;

Ejecutando el codigo linea por linea simple y sencillamente es reemplazar un 2 por un 11, es decir, son numeros enteros no veo cual puede ser el problema y el mensaje de error es el mismo..
Responder Con Cita
  #4  
Antiguo 24-05-2012
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
No creo que el error esté en tu código, o al menos no de forma directa. El error indica que el problema es la consulta a la tabla FoxPro, que es demasiado larga. Lo que no sé es porqué. A ver si algún otro forista con más experiencia con FoxPro puede ayudar.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #5  
Antiguo 25-05-2012
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
El problema es que si el locate no encuentra ese código, no se mueve por el dataset (no hay un tblact.Next) y estás en un bucle que mira si ha llegado al final, es decir, bucle infinito.

Si encuentra el registro, será muy raro que sea el último para que EOF sea True.

En plata, quita el bucle while y deja solo el locate.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #6  
Antiguo 25-05-2012
river_1 river_1 is offline
Miembro
 
Registrado: may 2010
Posts: 55
Poder: 15
river_1 Va por buen camino
Señores ya pude encontrar el problema , al parecer el locate no funciono y puse un Query pero aun asi me ponia el error , lo que pasa es que el "Selec * from " me regresaba todos los campos de la tabla cuando yo solo quiero actualizar un solo campo y la consulta era bastante grande. La solucion fue la siguiente:

Código Delphi [-]
tblact.First;
 while not tblact.Eof do
  begin
   Consulta:='SELECT ccodigop01,cidunida01 FROM MGW10005 WHERE CCODIGOP01=''';
   Consulta:=Consulta +TRIM(TblActcodigo_pro.Value);
   Consulta:=Consulta +'''';
   qRYPROD.SQL.Clear;
   qRYPROD.SQL.ADD(consulta);
   qRYPROD.Active := TRUE;
   qRYPROD.Open;
   IF qRYPROD.RecordCount<>0 THEN
    BEGIN
     qRYPROD.Edit;
     qRYPRODcidunida01.Value:=TblActunidad_bas.Value;
     qRYPROD.Post;
    END;
     tblact.Next;
    end;
   SHOWMESSAGE('Proceso Terminado');


Si se dan cuenta solo me estoy trayendo los campos que necesito, asi me funciono muy bien el Post.
Gracias por su tiempo...
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Actualizar datos entre tablas AnuardMichelen Firebird e Interbase 11 24-02-2012 17:51:24
error al momento de actualizar datos ledesma78 PHP 0 07-10-2008 03:19:59
Error al actualizar datos. vpepen SQL 4 02-04-2007 17:16:12
Error en Actualizar Base de datos SQL en Red freddiaz07 Conexión con bases de datos 2 25-09-2006 22:57:10
Error al actualizar las tablas Nathan MySQL 3 01-06-2006 10:05:35


La franja horaria es GMT +2. Ahora son las 01:59:11.


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