Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Problém so zobrazovaním údajov v DBGride

Tak som dnes prerábal trochu tú moju prácu.... Pre pripomenutie je to v robené v Delphi , databáza v Accesse, komunikácia prostredníctvom ADO komponentov.
A teraz k problému. Z formuláru Objednavka otvorim modalny podformular, v ktorom vypisujem objednavku. Po zadani udajov zatvaram podformular pomocou bitbuttonu. Na formulare Objednavky testujem modal result a ak je mr=Ok potom pomocou adotable idem na posledny riadok, dam ho editovat a doplnim do neho chybajuce položky z objednavky. Potial to funguje bez problemov. Nasledne ešte pokračujem a pomocou ADOQuery davam vypisovať do DBGridu zoznam vystavenych objednavok. Možno zbytočne zložité ale toto už prerábať nebudem, do konca apríla musím prácu odovzdať a veľké prerábky už robiť nechcem lebo aj prácu mám popísanú. No a pri tom vypisovaní do dbgridu mám ten problém.Proste mi to nezobrazí tú poslednú objednávku, ktorú som vytvoril.(pritom v databáze už je aj so všetkými údajmi) Skúšal som už všeličo ale nejak mi nič nepomohlo. Akonáhle zatvorím formulár Objednavka (dynamicky vytváraný), pamäť sa uvoľní, otvorím ho znovu a už v tom dbgride tá objednávka je. Jediné čo mi zabralo bolo medzi napĺňanie databázy a zobrazovanie z nej dať príkaz sleep(1000) ale to je hovadina. Na sekundu mi ten projekt zamrzne a to teda riešenie neni. Napadá Vás niečo? Vopred ďakujem.
P.S. Dával som aj príkaz SQL.Add('COMMIT') pred samotný SQL dotaz ale nepomohlo

Předmět Autor Datum
Commit se pouziva k potvrzeni transakce, ne pred vypisovani udaju. V databazi je ta posledni objedna…
Jan Fiala 17.04.2009 21:34
Jan Fiala
No práve, že je. Napísal som to len sa to v tom kvante textu stratilo. Kód vypadá takto: EditObjedn…
Rado 17.04.2009 21:47
Rado
Tak len rozmýšľam či nie je problém v tom testovaní modal resultu. Niečo podobné som mal aj včera, v…
Rado 17.04.2009 22:05
Rado
Proc by melo byt neprehledne? Napis si funkci, ktere predas do parametru potrebne hodnoty a ona ti v…
Jan Fiala 18.04.2009 09:34
Jan Fiala
Tak to hej, je mi jasné že to riešenie má a dokonca aj také aby sa na to dalo pozerať. Ale nakoľko d…
Rado 18.04.2009 11:16
Rado
To je zvlastnim, ze delas neco, co neznas a dokonce to ma byt odevzdane... Pak se ale nesmis divit,…
Jan Fiala 18.04.2009 11:27
Jan Fiala
Do praxe to nepojde.Je to "len" bakalarsky projekt a v podstate az pri tejto najhorsej casti ,kde da…
Rado 18.04.2009 11:40
Rado
Skusam to zatial takto ale nejak to nefunguje.. with ADOQuery1 do begin SQL.Clear; SQL.Add('UPDATE…
Rado 18.04.2009 13:59
Rado
SQL.Add('UPDATE Objednavky SET SumaTovaru= :SumaT WHERE Objednavky.IDObjednavky = :IDPOMOCNA'); Para…
Jan Fiala 18.04.2009 14:29
Jan Fiala
Takže konečne som to veľmi neefektívne rozbehol. dvakrát som kompletne zopakoval sadu ADOQuery a to…
Rado 18.04.2009 16:33
Rado
Proc jsi to nedal do jednoho Update prikazu? proc vlastne delas Update, kdyz podle vseho vkladas nov…
Jan Fiala 18.04.2009 16:49
Jan Fiala
Jeden UPDATE je prilis dlhy-presahuje 255 znakov. To by som prave chcel vediet ako ho rozdelit na dv…
Rado 18.04.2009 17:01
Rado
Tech 255 znaku je nejake omezeneni Accessu? normalne proti MS SQL pouzivame prikazy, ktere jsou dlou…
Jan Fiala 18.04.2009 17:55
Jan Fiala
Nemyslim.Skor si myslim ze to bude obmedzenie Delphi alebo. konkretne ADOQuery. Proste mi delphi vyh… poslední
Rado 18.04.2009 18:07
Rado

No práve, že je. Napísal som to len sa to v tom kvante textu stratilo. Kód vypadá takto:

EditObjednavky.ShowModal;
if EditObjednavky.ModalResult=mrOk then begin
 IDPom:=StrToInt(EditObjednavky.Label1.Caption);
 TableObjednavky.Last;
 TableObjednavky.Edit;
 TableObjednavky.FieldByName('SumaTovaru').AsString:=EditObjednavky.Label12.Caption;
 TableObjednavky.FieldByName('ZlavaPer').AsString:=EditObjednavky.Edit9.Text;
 TableObjednavky.FieldByName('ZlavaSum').AsString:=EditObjednavky.Label23.Caption;
 TableObjednavky.FieldByName('DPH').AsString:=EditObjednavky.Label25.Caption;
 TableObjednavky.FieldByName('CelkovaSuma').AsString:=FloatToStr(celkova);
 TableObjednavky.FieldByName('Provizia').AsString:=FloatToStr(provizia);
 TableObjednavky.FieldByName('NazovSpolocnostiPrijemcu').AsString:=EditObjednavky.Edit1.Text;
 TableObjednavky.FieldByName('MenoPrijemcu').AsString:=EditObjednavky.Edit2.Text;
 TableObjednavky.FieldByName('AdresaPrijemcu').AsString:=EditObjednavky.Edit3.Text;
 TableObjednavky.FieldByName('MestoPrijemcu').AsString:=EditObjednavky.Edit4.Text;
 TableObjednavky.FieldByName('PSCPrijemcu').AsString:=EditObjednavky.Edit5.Text;
 TableObjednavky.FieldByName('StatPrijemcu').AsString:=EditObjednavky.Edit6.Text;
 TableObjednavky.FieldByName('DatumDodania').AsString:=DateToStr(EditObjednavky.DateTimePicker1.Date);
 TableObjednavky.FieldByName('SposobDopravy').AsString:=EditObjednavky.ComboBox1.Text;
 TableObjednavky.FieldByName('Dopravne').AsInteger:=dopravne;
TableObjednavky.FieldByName('KontaktyID').AsInteger:=EditObjednavky.ADOTable1.FieldByName('KontaktyID').AsInteger;
 TableObjednavky.Post;
with ADOQuery2 do
 begin
   Active:=false;
   SQL.Clear;
   SQL.Add('SELECT * FROM Objednavky, Kontakty  WHERE Objednavky.KontaktyID=Kontakty.KontaktyID');
   Active:=true;
 end;

No a DBGrid je cez DataSource napojeny prave na ten ADOQuery.

Tak len rozmýšľam či nie je problém v tom testovaní modal resultu. Niečo podobné som mal aj včera, vtedy som mal dbgrid napojený na ADOTable a nechcel sa mi zase refrešnúť v prípade že som objednávku vymazal. Možno by pomohlo ak by som tie údaje dával prostredníctvom sql príkazu, len je to kvantum údajov..., to sql-ko by bolo asi neprehľadné..

Tak to hej, je mi jasné že to riešenie má a dokonca aj také aby sa na to dalo pozerať. Ale nakoľko drvivá vecí z tohto projektu je pre mňa veľké neznáme a prakticky som sa s tým nestretol tak všetko toto je pre mňa španielska dedina... . Ale už som niečo robil vkladaním parametra do sql príkazu tak snáď to podľa toho zosmolím. Aj už kašlem na to či to bude zle vypadať len aby to fungovalo.
Ešte treba dúfať aby to vyriešilo môj prvotný problém a začalo zobrazovať do dbgridu všetky údaje...

Do praxe to nepojde.Je to "len" bakalarsky projekt a v podstate az pri tejto najhorsej casti ,kde davam dokopy dve tabulky vztahu N:N pomocou pomocnej tabulky to obcas blbne ale ostatne som v podstate pochopil.
Preto to uz konecne chcem dat do plne funkcneho stavu a po obhajobe to uz nechcem ani vidiet...:-D
Zase na druhej strane aj s Vasou pomocou som dosiel hodne daleko na to ze som v zivote neprogramoval..
Uz aby sa mi ta skola skoncila.

Skusam to zatial takto ale nejak to nefunguje..

with ADOQuery1 do begin
SQL.Clear;
SQL.Add('UPDATE Objednavky SET SumaTovaru=SumaT WHERE Objednavky.IDObjednavky=IDPOMOCNA');
Parameters.ParamByName('SumaT').Value:= EditObjednavky.Label12.Caption;
Parameters.ParamByName('IDPOMOCNA').Value:= StrToInt(EditObjednavky.Label1.Caption);
ExecSQL;

Mozte mi prosim poradit kde asi robim chybu? Vyhadzuje mi totiz ze nevie najst parameter SumaT.

Takže konečne som to veľmi neefektívne rozbehol. dvakrát som kompletne zopakoval sadu ADOQuery a to takto:

 with ADOQuery1 do begin
     Close;
     SQL.Clear;
     SQL.Add('UPDATE Objednavky SET SumaTovaru=:SumaT,ZlavaPer=:ZlavaP,ZlavaSum=:ZlavaS,DPH=:DPHp,CelkovaSuma=:Celkova,Provizia=:Prov,NazovSpolocnostiPrijemcu=:SpolP,MenoPrijemcu=:MenoP,AdresaPrijemcu=:AdresaP WHERE Objednavky.IDObjednavky=:IDPOMOCNA');
     Parameters.ParamByName('IDPOMOCNA').Value:= IDPom;
     Parameters.ParamByName('SumaT').Value:= EditObjednavky.Label12.Caption;
     Parameters.ParamByName('ZlavaP').Value:= EditObjednavky.Edit9.Text;
     Parameters.ParamByName('ZlavaS').Value:= EditObjednavky.Label23.Caption;
     Parameters.ParamByName('DPHp').Value:= EditObjednavky.Label25.Caption;
     Parameters.ParamByName('Celkova').Value:= FloatToStr(celkova);
     Parameters.ParamByName('Prov').Value:= FloatToStr(provizia);
     Parameters.ParamByName('SpolP').Value:= EditObjednavky.Edit1.Text;
     Parameters.ParamByName('MenoP').Value:= EditObjednavky.Edit2.Text;
     Parameters.ParamByName('AdresaP').Value:= EditObjednavky.Edit3.Text;
     ExecSQL;
   end;
   with ADOQuery1 do begin
     Close;
     SQL.Clear;
     SQL.Add('UPDATE Objednavky SET MestoPrijemcu=:MestoP,PSCPrijemcu=:PSCp,StatPrijemcu=:StatP,DatumDodania=:DatumD,SposobDopravy=:SposobD,Dopravne=:Doprav,KontaktyID=:Kontakt WHERE Objednavky.IDObjednavky=:IDPOMOCNA');
     Parameters.ParamByName('IDPOMOCNA').Value:= IDPom;
     Parameters.ParamByName('MestoP').Value:= EditObjednavky.Edit4.Text;
     Parameters.ParamByName('PSCp').Value:= EditObjednavky.Edit5.Text;
     Parameters.ParamByName('StatP').Value:= EditObjednavky.Edit6.Text;
     Parameters.ParamByName('DatumD').Value:= DateToStr(EditObjednavky.DateTimePicker1.Date);
     Parameters.ParamByName('SposobD').Value:= EditObjednavky.ComboBox1.Text;
     Parameters.ParamByName('Doprav').Value:=dopravne;
     Parameters.ParamByName('Kontakt').Value:= EditObjednavky.ADOTable1.FieldByName('KontaktyID').AsInteger;
     ExecSQL;
     end;

Síce neefektívne ale funguje. A čo je najdôležitejšie, zobrazuje to obratom v DBGride, takže môj problém je vyriešený. Ešte by som poprosil odpoveď ako môžem jednoducho rozdeliť príkaz SQL.Add... tak aby som nemusel opakovať celú sadu ale len v dvoch riadkoch rozpísal ten príkaz.

Jeden UPDATE je prilis dlhy-presahuje 255 znakov. To by som prave chcel vediet ako ho rozdelit na dva riadky aby nepresahoval max.povolene mnozstvo znakov.
No a co sy tyka druhej otazky, nevytvaram novu objednavku aj ked to skoro tak vypada podla mnozstva udajov co tam vkladam na zaver. Este predtym mam vytvoreny riadok s IDObjednavky, ktory potrebujem kvoli ukladaniu a priradovaniu tovarovych poloziek.(v prikaze je to IDPOMOCNA ) Je to velmi krkolomne spravene a keby som to mal robit znova tak by som to robil asi uplne inak.Ale to uz je teraz jedno. Ak by ste mi este poradili ako ten UPDATE prikaz rozdelit na dva riadky aby to nevypadalo takto zle, bol by som Vám moc zaviazaný. V každom prípade ste mi moc pomohli a musím Vám moc poďakovať.;-)

Nemyslim.Skor si myslim ze to bude obmedzenie Delphi alebo. konkretne ADOQuery. Proste mi delphi vyhodi Error: String literals may have at most 255 elements. Uz som to raz videl, ze v tom pripade rozdelil prikaz na dva riadky ale aka je syntax si neviem spomenut. A na webe tiez neviem najst ako to urobit.

Zpět do poradny Odpovědět na původní otázku Nahoru