[ siki_2006 @ 30.10.2009. 20:16 ] @
Pozdrav svima.

u pitanju je delphi i access, kako mogu da sve podatke koji su rezultat SQL upita iz jednog ADOQuery-a i jos neke podatke iz text polja unesem u drugu tabelu?

Da su u pitanju samo podaci iz tabele uradio bih to preko INSERT SELECT, medjutim tu su i podaci iz text polja.

Da li je moguce da to uradim pomocu WHILE petlje sve do kraja ADOQuery-a (ADOQuery.Eof), INSERT-ujuci u svakom ciklusu po jedan slog u drugu tabelu preko DrugaTabela.SQL.Text="INSERT INTO ...." i kako bi to izgledalo odprilike (deo koda)?

Hvala unapred

[ savkic @ 31.10.2009. 11:47 ] @
> Da li je moguce da to uradim pomocu WHILE petlje sve do kraja ADOQuery-a (ADOQuery.Eof), INSERT-ujuci u svakom ciklusu po jedan
> slog u drugu tabelu preko DrugaTabela.SQL.Text="INSERT INTO ...." i kako bi to izgledalo odprilike (deo koda)?

Evo neophodnih koraka, sintaksa nije tačna ti pogledaj kako se tačno zovu metode u tvom datasetu.

Code:

  ins.Transaction.Start;
  ins.SQL := 'INSERT INTO TABELA (POLJE1, POLJE2) VALUES (:A, :B);
  ins.Prepare;
  Query.First;
  while not Query.Eof do
  begin 
    ins.Params[0] := Query.FieldByName('PROBA').AsString;
    ins.Params[1] := 2;
    ins.ExecSql;
  end;

  Ins.Transaction.Commit;

[ siki_2006 @ 31.10.2009. 15:40 ] @
Da li ovo mogu da iskoristim sa Access-ovom bazom i ADO komponentama?

i kako bi to izgledalo? razumeo sam logiku , medjutim ne znam kako da realizujem sa Accessom. sta mu doje "ins" u ovom slucaju, posto ADOQuery komponenta ne poseduje metodu Transaction, kolko mogu da primetim? Pocetnik sam u Delphi-u pa nije jasno, hvala
[ savkic @ 01.11.2009. 01:25 ] @
> i kako bi to izgledalo? razumeo sam logiku , medjutim ne znam kako da realizujem sa Accessom.

Princip je isti u svim bazama.

> sta mu doje "ins" u ovom slucaju,

ins = insert (neka kveri komponenta).

> posto ADOQuery komponenta ne poseduje metodu Transaction, kolko mogu da primetim?

Za ADO ne znam kako funkcioniše ali mora imati neki način za kontrolu transakcije, pogledaj u top temi postoji uputstvo za rad sa ADOm, verujem da ima opisan i način upotrebe transakcija.
[ _deran_ @ 01.11.2009. 09:16 ] @
nedostaje "Query.Next;" ... ako query vrati vise record-a, bice mrtva petlja.
[ siki_2006 @ 01.11.2009. 21:30 ] @
u top temi nema nista o ADO transakcijama, ili bar ja nisam nasao nista. Potrazio sam nesto po knjigama i internetu i video da se kontrola transakcije kod ado komponenata vrsi preko ADOConnection komponente, pa sam odradio nesto sto izgleda ovako odprilike:

Code:

procedure TForm1.Button3Click(Sender: TObject);
begin
konekcija.BeginTrans;
try
ADOCommand.CommandText:='INSERT INTO tabela (polje1, polje2, polje3)  VALUES (:parametar1,:parametar2,:parametar3)';
ADOQuery.First;
while not ADOQuery.Eof do
  begin
      ADOCommand1.Parameters.ParamByName('parametar1').Value:=
      ADOQuerypolje1.Value;
      ADOCommand1.Parameters.ParamByName('parametar2').Value:=
      ADOQuerypolje2.Value;
      ADOCommand1.Parameters.ParamByName('parametar3').Value:=
      StrToInt(edit3.Text);
      ADOCommand1.Execute;
      ADOQuery.Next;
   end;
 
  konekcija.CommitTrans;
except
   konekcija.RollbackTrans;
   raise;
end;
end;



medjutim, posle izvrsenja gore navedenog koda, javlja mi sledecu poruku:

"Project projekat.exe rised exception class EOIeException with message 'Overfolw'. Proces stopped..."


sta bi to moglo da bude ?
[ savkic @ 02.11.2009. 20:37 ] @
> medjutim, posle izvrsenja gore navedenog koda, javlja mi sledecu poruku:
> "Project projekat.exe rised exception class EOIeException with message 'Overfolw'. Proces stopped..."

Prvo lociraj gde se tačno dešava ta greška (pusti kroz debugger i F7 do greške), moguće je da vrednosti koje prosleđuješ parametrima su nepodržane. Takođe, pokušaj da koristiš konkretne tipove podataka (AsString, AsInteger), ne variant (Value).
[ siki_2006 @ 05.11.2009. 12:01 ] @
Hvala, u pitanju je bio tip podataka, vrednosti koje je program generisao i prosledjivao parametrima su premasivale opseg Integer-a.