Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   2 Listbox y BD .... (https://www.clubdelphi.com/foros/showthread.php?t=15601)

elbilla 28-10-2004 17:26:34

2 Listbox y BD ....
 
Tengo dos LISTBOX en los cuales hago lo de siempre, pasar de un lado a otro valores de 1 lista. El problema que tengo es que al pasarlo a la base de datos lo hago de la siguiente manera y me da error. Si por ejemplo, en este caso, paso dos valores a la lista me lo mete en la base de datos, pero si solo meto un valor me da error " LIST INDEX OUT OF BOUNDS (1)"
Pensaba que si comparaba con ' ' y habia algo metido lo pasaría a la base de datos y sino no se metería en el bucle. Que hago mal ??
El objetivo es q todos los valores que paso a la segunda lista se metan en una base de datos.

Código:

table4.open;
table4.insert;
x:=0;
if listbox3.Items[x] <> ' ' then
  begin
  table4.FieldByname('Exp1').AsString:=listbox3.Items[x];
  x:=x+1;
  end;
if listbox3.Items[x] <> ' ' then
  begin
  table4.FieldByname('Exp2').AsString:=listbox3.Items[x];
  x:=x+1;
  end;
 
Table4.post;
table4.flushbuffers;

Un saludo.
Gracias

elbilla 03-11-2004 17:45:35

Sigo sin dar con la solución. Una ayudita please...

Un saludo..

roman 03-11-2004 18:40:02

Si sólo metes un valor en la lista, el primer condicional se ejecuta y se incremente el valor de x de manera que al llegar al segundo condicional x = 1 y no habiendo más que el elemento 0 en la lista te produce el error por intentar acceder a listbox3.Items[1].

Si metes dos valores no te falla porque listbox3 tiene los elmentos 0 y 1.

También te va a fallar si no hay ningún elemento en la lista. En este caso fallará dese el primer condicional al intentar acceder a listbox3[0] ya que no existe item coníndice 0.

No sé bien qué intentas hacer pero da la impresión de que requieres un bucle:

Código Delphi [-]
for x := 0 to listbox3.Count - 1 do
begin
  table4.Insert;
  table4.FieldByname('Exp1').AsString:=listbox3.Items[x];
  table4.Post;
end;

De esta forma, además de que abarcas cualquier número de elementos en la lista, te aseguras que dentro del bucle x sólo pueda ser un índice válido de listbox3. En el caso de que la lista esté vacía, ni siquierea se entrará al bucle.

// Saludos

elbilla 04-11-2004 00:23:19

El problema q tengo es q haya los elementos q haya se metan en la base de datos. Por eso lo de comparar con blanco en mi código del principio. El tema es lo q tu dices, al intentar acceder a un elemento de la lista q no existe da el error. Pero como hago para saber si el el elemento 'x' existe o no ??
Como dije al principio pensaba q era compararlo con ' ', pero ya he visto q no es así. Entonces como?
En el ejemplo q me pones no me valdría, ya q son 15 variables (de 'Exp1' a 'Exp15') y si solo meto en 'Exp1' machacaria el mismo valor todo el tiempo.
Otra cosa q me gustaria aclarar es si se puede meter una tabla dentro de un campo de la BD, ya q por ejemplo en este caso la tabla en cuestion tiene casi 40 campos y pienso q es demasiado. No ?? Vamos en este caso mi intencion sería en el campo exp, meter una tabla de 15 elementos. Es posible ?? La BD es Paradox.

Un saludo..
Gracias..

EDITADO

Ya lo he sacado, es lo q decias necesitaba un bucle como el q tu me has puesto y dentro de ahí con IF's controlar si es el elmento 1 exp1, el 2 exp2, y así sucesivamente...
Lo q sigo en la duda es lo de tabla q he dicho antes..

Gracias de nuevo.

roman 04-11-2004 04:45:57

No creo que Paradox te permitar anidar tablas pero además esto rompería la normalización de tus tablas. Por otro lado Paradox admite hasta 255 campos por tabla.

// Saludos

Lepe 04-11-2004 11:06:12

Quizás no he entendido muy bien el tema, pero a ver que parece esto:
Código Delphi [-]
  for i:=0 to listbox3.items.count-1 do
  if  table4.FindField('Exp'+inttostr(i)) <> nil  then // si existe el campo
  begin
    table4.Insert;
    table4.FieldByname('Exp'+inttostr(i)).AsString:=listbox3.Items[i];
    table4.Post;
  end
  else
    ShowMessage(' uuuuppss, el campo Exp'+inttostr(i) + ' no existe ');

Otra posibilidad es crearte una tabla llamada "Expresiones" con 2 campos, una de código (para relacionar con la tabla maestra), y otra con las expresiones del tipo "Exp1".."Exp15"

Saludos y espero que vayan los tiros por aqui.


La franja horaria es GMT +2. Ahora son las 08:27:51.

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