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 Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-08-2010
MikyVato MikyVato is offline
Miembro
 
Registrado: mar 2005
Posts: 39
Poder: 0
MikyVato Va por buen camino
Arrow ERROR index out of bounds (15)

Hola a todos, recurro de nuevo a uds tengo un problema logre conectarme con la DB tanto local como remotamente atravez de un ODBC (uno para cada DB, son 2). Leo los datos de un tabla en particular de forma local y los subo de forma remota en la otra DB, la tabla tiene 24 Campos recupero los datos con un Query de la Paleta BDE pero no me permite subir todo los campo me muestra el error :EListError with message List index out of bounds (15) Alguien me puede ayudar??:
Responder Con Cita
  #2  
Antiguo 17-08-2010
MikyVato MikyVato is offline
Miembro
 
Registrado: mar 2005
Posts: 39
Poder: 0
MikyVato Va por buen camino
Exclamation

comparto el codigo quizas puedan encontrar el hueco.

Primero obtengo los datos usando un Query que se conecta localmente
Código Delphi [-]
 QPrincipal.Active := False; 
 QPrincipal.SQL.Clear; 
 QPrincipal.SQL.Text := 'select * from historico_avl_1008 where ORDER_ID > '''+idlocal+'''';
 QPrincipal.Active := True;

Despues asigno los valores obtenidos a los string
Código Delphi [-]
while (not QPrincipal.Eof) do
  begin
    v1 := QPrincipal.Fields[0].AsString;
    v2 := QPrincipal.Fields[1].AsString;
    v3 := QPrincipal.Fields[2].AsString;
       .    
       .
       .
    v24 := QPrincipal.Fields[23].AsString;

// Hago el Insert Remoto
QInsercion.SQL.Clear;
QInsercion.SQL.Add ('INSERT INTO `TablaRemota`');
QInsercion.SQL.Add ('(Campos de la Tabla');
QInsercion.SQL.Add ('VALUES  ('''+v1+''','''+v2+''','''+v3+'''...'''+v24+'''');
try
  QInsercion.ExecSQL;
except
   LError.Caption := 'No se Subieron Datos!!!';
end;
QPrincipal.Next;
end;

Bueno espero sirva de algo....
Responder Con Cita
  #3  
Antiguo 17-08-2010
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Pues así, de bote pronto, es como si QPrincipal no tuviera más de 15 campos. ¿En qué línea del programa se detiene al aparecer el error?
Responder Con Cita
  #4  
Antiguo 17-08-2010
MikyVato MikyVato is offline
Miembro
 
Registrado: mar 2005
Posts: 39
Poder: 0
MikyVato Va por buen camino
El error aparace en la linea v15 := QPrincipal.Fields[14].AsString; realmente no entiendo porque estaba funcionando, intente usando 2 Query supuse que quizas sea un problema de memoria o algo asi pero no igual da el error, pero si coloco hasta 14 items cualquiera sea anda de LUX... Espero su ayuda realmente me esta sacando este problema
Responder Con Cita
  #5  
Antiguo 17-08-2010
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
¿Cambiaste de base de datos o algo así? ¿Seguro que se trata de la misma tabla que cuando funcionaba bien?

¿Por qué no lo haces con una rejilla DBGrid asociada a esa consulta (sin definirle columnas a la rejilla) y miras cuántos campos se muestran realmente?
Responder Con Cita
  #6  
Antiguo 17-08-2010
MikyVato MikyVato is offline
Miembro
 
Registrado: mar 2005
Posts: 39
Poder: 0
MikyVato Va por buen camino
segui tu concejo coloque el DBGrid y me estan faltando columnas cuando el Select que estoy arrojando tiene * esto me ha dejado desconcertado totalmente.... comparo el DBGrid directamente con la DB y me están faltando campos en el DBGrid no lo entiendo??????

Última edición por MikyVato fecha: 17-08-2010 a las 08:01:08.
Responder Con Cita
  #7  
Antiguo 17-08-2010
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
He visto que has abierto otro hilo con el mismo tema en conexiones de base de datos, ese seguramente te lo cierren porque no se pueden crear hilos con la misma cuestión.
Yo creo que el error es lo que te comenta AlGonzalez, la tabla a la que estás accediendo no tiene más de 15 fields, te lo digo porque a mi me ha pasado a veces de hacer una copia de la bbdd para no tocar la original, hacerle cambios a la copia y cuando apunto a la original me sale el error porque la original no lleva los campos nuevos.
¿Porque no pruebas con la propiedad fielcount a ver si te sigue dando error en lugar de poner tu el número de fields a mano?

Un salduo.
Responder Con Cita
  #8  
Antiguo 17-08-2010
MikyVato MikyVato is offline
Miembro
 
Registrado: mar 2005
Posts: 39
Poder: 0
MikyVato Va por buen camino
En realidad ya he chquedo lo que propones, la Tabla tiene 24 campos pero al hacer el SELECT * solo muestra 15 de esos campos en el BGRID... La verdad estoy que no se que hacer lo único que se me ocurre es que puede ser un problema en el conector ODBC
Responder Con Cita
  #9  
Antiguo 17-08-2010
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola MikyVato, revisa si no tienes campos persistentes (docle click sobre tu Query), si los tienes puede que solo tengas 15 campos ahí y aunque hagas el "Select * From....", al tenerlos como persistentes solo te va a reconocer los que tengas como persistentes.

Y no repitas hilos por favor.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #10  
Antiguo 18-08-2010
MikyVato MikyVato is offline
Miembro
 
Registrado: mar 2005
Posts: 39
Poder: 0
MikyVato Va por buen camino
Smile Solucionado

Bueno Bueno ya encontre el Problema estaba utilizando MySQL ODBC 5.1 Drivers para crear los ODBC instale una version anterior la 3.1 y ya se puede leer toda la DB el porque no lo se si alguien se entera me avisa... Les pido disculpas por haber creado dos hilos pero en ocasiones uno pierde la calma por la falta de soluciónes... Bueno ahora a pagar mi deuda dejo el código de lo que estuve armando hasta el momento

Componentes que utilizo:
From - 3 BitBotton - 1 Edit - 1 DBGrid - 3 Query - 1 DataSource - 2 DataBase y algunos Label donde muestro algo de info...

Código Delphi [-]
//Saco el tiempo asignado por defecto en el Timer y lo muestro en Edit
procedure TForm1.FormCreate(Sender: TObject);
var
  aux :integer;
begin
  aux := (Intervalos.Interval) div 1000;
  ETiempo.Text := IntToStr(aux);
end;

//Pregunto si esta seguro que desea salir
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  if MessageDlg ('Desea Salir del Sistema?',mtConfirmation,[mbYes,mbNo],0)=mrYes then
     Close;
end;

//Botón replicar copia los datos de modo local y los envía a internet
procedure TForm1.BBReplicarClick(Sender: TObject);
var
  idlocal, v2, v3, v4, v5, v6, v7, v8, v9, v10 :string;
  v11, v12, v13, v14, v15, v16, v17, v18, v19 :string;
  v20, v21, v22, v23, v24 :string;
begin
  //obtengo el ultimo ID da la tabla externa
      QidExterno.Active := False;
      QidExterno.SQL.Clear;
      QidExterno.SQL.Text := 'select * from TablaRemota order by ORDER_ID desc';
      try
        QidExterno.Active := True;
        idlocal := QidExterno.Fields[0].AsString;
      except
        LTiempo.Caption := 'Error para obtener ID ServerWeb!!';
      end;
     
      //obtengo los registros pendientes de subir de la Tabla Local
        QPrincipal.Active := False;
        QPrincipal.SQL.Clear;
        QPrincipal.SQL.Text := 'select * from TablaLocal where ORDER_ID > '+idlocal+'';
        QPrincipal.Active := True;
        //Estos datos son visibles en el DBGrid

        while (not QPrincipal.Eof) do
          begin
            idlocal := QPrincipal.Fields[0].AsString;
            v2 := QPrincipal.Fields[1].AsString;
            v3 := QPrincipal.Fields[2].AsString;
            v4 := QPrincipal.Fields[3].AsString;
            v5 := QPrincipal.Fields[4].AsString;
            v6 := QPrincipal.Fields[5].AsString;
            v7 := QPrincipal.Fields[6].AsString;
            v8 := QPrincipal.Fields[7].AsString;
            v9 := QPrincipal.Fields[8].AsString;
            v10 := QPrincipal.Fields[9].AsString;
            v11 := QPrincipal.Fields[10].AsString;
            v12 := QPrincipal.Fields[11].AsString;
            v13 := QPrincipal.Fields[12].AsString;
            v14 := QPrincipal.Fields[13].AsString;
            v15 := QPrincipal.Fields[14].AsString;
            v16 := QPrincipal.Fields[15].AsString;
            v17 := QPrincipal.Fields[16].AsString;
            v18 := QPrincipal.Fields[17].AsString;
            v19 := QPrincipal.Fields[18].AsString;
            v20 := QPrincipal.Fields[19].AsString;
            v21 := QPrincipal.Fields[20].AsString;
            v22 := QPrincipal.Fields[21].AsString;
            v23 := QPrincipal.Fields[22].AsString;
            v24 := QPrincipal.Fields[23].AsString;
              QInsercion.SQL.Clear;
              QInsercion.SQL.Add ('INSERT INTO `TablaRemota`');
              QInsercion.SQL.Add ('(Campos de una Tabla)');
              QInsercion.SQL.Add ('VALUES ('''+idlocal+''','''+v2+''','''+v3+''',....'''+v24+''',');
            try
              QInsercion.ExecSQL; 
              LTiempo.Caption := ' '+DateToStr (Date)+'  '+TimeToStr (Time)+'';
            except
              LTiempo.Caption := 'No se Subieron Datos!!!';
            end;
              QPrincipal.Next;
          end;
end;

//Evento del Timer que llama al Boton Replicar
procedure TForm1.IntervalosTimer(Sender: TObject);
begin
  BBReplicar.Click;
end;

//Controla que solo pueda ingresar numeros en Edit que modifica Timer
procedure TForm1.ETiempoKeyPress(Sender: TObject; var Key: Char);
begin
   if not (Key in ['0'..'9',#8]) then
     Key :=#0
end;

//Cdo modifico el tiempo del Timer
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  if StrToInt (ETiempo.Text) > 5 then
    begin
      Intervalos.Interval := StrToInt(ETiempo.Text) * 1000;
      ShowMessage('Se modifico el tiempo correctamente');
    end
  else
    ShowMessage('Debe Ingresar un valor mayor a 5!!!')
end;

procedure TForm1.ETiempoEnter(Sender: TObject);
begin
  ETiempo.Text := '';
end;


Ahora solo me falta crear un isntalador para la aplicacion que debe crear los ODBC y copiar los archivos necesarios para que la Aplicacion funcione sin la necesidad de que instale Delphi en la maquina que la verdad no tengo idea de como hacerlo pero eso es otro Hilo que ya vendra pronto pronto... por ahora gracias y muchas x su ayuda...
Responder Con Cita
  #11  
Antiguo 18-08-2010
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
no he seguido el hilo, solo leí tu ultimo mensaje... y veo que estás trabajando con ODBC, que no es malo, pero teninendo librerias de acceso directo a MySQL como Zeos creo que podrias planteartelo como alternativa.

saludos y buena por haber compatido tu solución.
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
error list index out of bounds bothy Varios 2 16-04-2010 11:00:19
Error (List Index of bounds)? DM2005 Varios 2 08-07-2006 13:53:29
Error List index out of bounds (14) AMINOA2R Firebird e Interbase 3 30-09-2005 01:32:57
Error: List Index Out Bounds() MasterXP SQL 4 18-02-2005 07:41:06


La franja horaria es GMT +2. Ahora son las 18:45:13.


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