Problemi su ciclo

di il
3 risposte

Problemi su ciclo

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 ........ecc '';
BQuery := objUtils.GetRecordSet(SQLQueryPrefix);

CodePrefix:='';
while not BQuery.Eof do
begin
CodePrefix := CodePrefix+','+String(objUtils.GetValueFromField(SQLQueryPrefix, '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!

3 Risposte

  • Re: Problemi su ciclo

    Posta bene il testo della query.....
    ks si kapisce poko....
    ciao
  • Re: Problemi su ciclo

    Questo è tutto il codice


    SQLQueryCodePrefix := 'select CODE_PREFIX from FL where id_fl= '+ StructForm_ElTree_TreeView.Selected.ColumnText[3] + '';
    CodePrefix := objUtils.GetValueFromField(SQLQueryCodePrefix, 'CODE_PREFIX');

    SQLQuery := 'select id_fl from FL where CODE_PREFIX like ''' + CodePrefix + '%'' ';


    AQuery := objUtils.GetRecordSet(SQLQuery);
    while not AQuery.Eof do ----------------> questo è il ciclo che cicla correttamente ma mi tira fuori sempre il primo valore che incontra!!!
    begin
    id_fl := objUtils.GetValueFromField(SQLQuery, 'id_fl');
    SQLQueryOdL := 'select * from WORK_ORDER where id_fl = '+ id_fl + '';
    BQuery := objUtils.GetRecordSet(SQLQueryOdL);

    if not BQuery.IsEmpty then
    begin
    if MessageDlg('Sono presenti OdL nella Sede Tecnica selezionata o nelle Sedi Tecniche figlie, si vuole procedere?' , mtConfirmation, [mbYes, mbNo], 0) = mrYes then
    begin
    if MessageDlg(objTranslation.GetMsg('MSG_032') + ' ' +StructForm_ElTree_TreeView.Selected.Text + ' e tutti i suoi figli?' , mtConfirmation, [mbYes, mbNo], 0) = mrYes then
    //if MessageDlg('Cancellare la sede tecnica:' + StructForm_ElTree_TreeView.Selected.Text + ' e tutti i suoi figli?' , mtConfirmation, [mbYes, mbNo], 0) = mrYes then
    begin
    Screen.Cursor := crHourGlass;
    SQLQuery := 'DELETE FROM FL WHERE ID_FL in (SELECT ID_FL FROM dbo.FL WHERE ((CODE_PREFIX LIKE ''' + StructForm_ElTree_TreeView.Selected.Text + '/%'') OR (CODE_PREFIX = '''+StructForm_ElTree_TreeView.Selected.Text+''')))';
    //SQLQuery := 'DELETE FROM FL WHERE ID_FL=' + StructForm_ElTree_TreeView.Selected.ColumnText[3];
    flagResult := objUtils.SetRecordSet(SQLQuery,false);
    if flagResult then
    begin
    SQLQuery := 'SELECT CODE_PREFIX FROM FL WHERE ID_FL = '''+StructForm_ElTree_TreeView.Selected.ColumnText[3]+'''';
    SQLQuery := 'EXECUTE REFRESH_TREE_VIEW '''+String(objUtils.GetValueFromField(SQLQuery,'CODE_PREFIX'))+'''';
    flagResult := objUtils.SetRecordSet(SQLQuery,false);
    objUtils.UpdateDB();
    end
    else
    begin
    objUtils.RestoreDB();
    MessageDlg(objTranslation.GetMsg('MSG_041'), mtError, [mbOK], 0);
    end;
    Screen.Cursor := crDefault;
    if StructForm_ElTree_TreeView.Selected.Parent <> nil then
    GetBranch(StructForm_ElTree_TreeView.Selected.Parent, StructForm_ElTree_TreeView.Selected.Parent.Text)
    else
    Close;
    end;
    end;
    end;
    AQuery.Next;
    end;
  • Re: Problemi su ciclo

    Non conosco l'oggetto objUtils.

    Penso tuttavia che dovrebbe esistere una proprietà tipo BQuery.FieldByName('nome campo').AsString per ottenere:

    CodePrefix:='';
    while not BQuery.Eof do
    begin
    CodePrefix := CodePrefix+','+BQuery.FieldByName('ID_FL').AsString;
    BQuery.Next;
    end;

    p_s
Devi accedere o registrarti per scrivere nel forum
3 risposte