PDA

Visualizza la versione completa : [DELPHI] problemi su ciclo


ttttttttttttttt
25-01-2008, 13:51
Ciao a tutti,

io ho un problema all'apparenza banale da cui non riesco ad uscire!

Io ho una query su cui ciclo, estraggo dei dati e dovrei accodare tutti i dati estratti in una variabile... questo il codice:


SQLQueryPrefix:='select id_fl from WORK_ORDER where id_fl = '+ StructForm_ElTree_TreeView.Selected.ColumnText[3] + ' or id_fl= ' + id_parent + '';
BQuery := objUtils.GetRecordSet(SQLQueryPrefix);

CodePrefix:='';
while not BQuery.Eof do
begin
CodePrefix := CodePrefix+','+String(objUtils.GetValueFromField(S QLQueryPrefix, 'ID_FL'));
BQuery.Next;
end;


alla fine la vairabile CodePrefix contiene i 3 cicli effettuati (numero corretto) ma con il primo valore pescato ripetuto tre volte!

la query eseguita sul DB d come risultato A,B,C

ma io nella variabile mi ritrovo A,A,A

dove sbaglio?

grazie! :)

ttttttttttttttt
28-01-2008, 13:31
ho semplificato un p il codice.....giusto per capire meglio....


SQLQuery := 'select id_fl from FL where CODE_PREFIX like ''' + CodePrefix + '%'' ';
AQuery := objUtils.GetRecordSet(SQLQuery);
with AQuery do
begin
if not IsEmpty then
begin
AQuery.Open;
while not AQuery.Eof do
begin
id_fl := objUtils.GetValueFromField(SQLQuery, 'id_fl');
SQLQueryOdL := 'select * from WORK_ORDER where id_fl = '+ id_fl + '';
BQuery := objUtils.GetRecordSet(SQLQueryOdL);

AQuery.Next;
end;


ma anche cos non va.... :(

Dalton
28-01-2008, 14:17
metti un breakpoint al ciclo while e vedi cosa ti va a scrivere volta per volta su CodePrefix (F8 per avanzare) probabilmente se c' un errore lo capirai vedendo i valori che assegna ad ogni ciclo. ciao!

ttttttttttttttt
28-01-2008, 14:19
guarda..sono 2 gg che debuggo!

non mi da nessun errore...

il valore che associa al code_prefix di volta in volta sempre il primo....come se il cursore non passasse al record successivo!

Dalton
28-01-2008, 14:29
mmm... nn capisco sinceramente dovrebbe funz anche come hai fatto tu... cmq prova cos, piuttosto che get.....:
i:=0;
while i<>eof do
begin
CodePrefix:=CodePrefix+query.fields[i].asstring;
query.next;
inc(i);
end;

Dalton
28-01-2008, 14:36
scusami ma in questa tabella esistono doppioni?

ttttttttttttttt
28-01-2008, 15:28
no no nessun doppione.....ora provo il tuo codice...

Dalton
28-01-2008, 15:32
scusami ho sbagliato devi aggiun una variabile

i:=0;
j:=0;//se nella query il campo che vuoi nella prima colonna
while i<>eof do
begin
CodePrefix:=CodePrefix+query.fields[j].asstring;
query.next;
inc(i);
end;

ttttttttttttttt
28-01-2008, 15:40
cmq guarda...

avevo provato anche questo codice...


begin
test := 0;
AQuery := objUtils.GetRecordSet(SQLQuery);
while not AQuery.Eof do
begin
if test = 0 then
id_fl1 := String(objUtils.GetValueFromField(SQLQuery, 'ID_FL'));

if test = 1 then
id_fl2 := String(objUtils.GetValueFromField(SQLQuery, 'ID_FL'));

if test = 2 then
id_fl3 := String(objUtils.GetValueFromField(SQLQuery, 'ID_FL'));

AQuery.Next;
inc(test);
end;

ma niente....il valore sempre il primo...

Dalton
28-01-2008, 15:53
guarda il codice sembra giusto... che nn ci sia qualc che nn va nella query ma qualkcoisa del genere:
QryVar.SQL.Clear;
QryVar.SQL.Add('SELECT * FROM pages_layout WHERE ' +
'pages_layout.baseline = 2 AND ' +
'pages_layout.id = 3');
QryVar.Open;???

Loading