Zeos - Dublujący zapis do Mysql

0

Hej :)

Mam taki mały problem z zeosem - zawsze dubluje mi wpisy do bazy...:/

Mam forme z editem, wpisuje mu jakieś dane, daje buttonem zapisz i program zapisuje -tyle że 2 razy... :/ wie ktoś może co mogłem pokręcić???

zapisuje w taki sposób:
var
Query : string;
begin
Query := 'INSERT INTO av_kontgrup set nazwa = + Edit1.Text +';
Data.dSQL.Sql.Clear;
Data.dSQL.Sql.Add(Query);
Data.dSQL.Open;
ShowMessage('Grupa dopisana!!!');
Close;

próbowałem już wszystkiego, ale nic nie udało mi się zdziałać....:( Byłbym bardzo wdzięczny, jakby ktoś mi pomógł z tym...

Pozdrawiam, North

0

nikt naprawde nie wie?? :(

0

Musisz sprawdzić, czy kod wpisujący do bazy nie jest gdzieś wywoływany drugi raz. U mnie Zeos nigdy nie dublował wpisów.

0

raczej to nie to ... mógłym się do Ciebie odezwać na priva?? to jest w sumie 1 forma + kontrolki (to co szaleje) - reszta chodzi aż miło... tylko że reszta wyświetla zapytania wpisane w kontrolke - a tu używam kodu...<hmmm> No nie wiem, pomógłbyś mi ?? Byłbym baaaaaaaaaaardzo wdzięczny....:)

Pozdraiwam North

0

Jak ci się uda akurat mnie dorwać na gadu to proszę... Ale podejrzewam, że szybciej będzie obejrzeć źródła programu wykorzystującego Zeos, który kiedyś zamieściłem w Kodach źródłowych.

0

właśnie pisze do Ciebie :)

0

btw. który plik ma tego zeosa -bo tu duuuże tego ;)

0

oki, przykład mam -robie podobine a mi dubluje...:/

0

oki, działa piękine :)))

Mógłyś im wyjaśnić tylko to:
Data.dSQL.SQL.Add('INSERT INTO av_kontgrup values(0, :nazwa)');
Data.dSQL.ParamByName('nazwa').AsString := Edit1.Text;

rozumiem że to 1 to zapytanie, tylko dlaczego tam jest 0 i ":nazwa" ??

a gdybym chciał powiedzmy zapisać zawartość Edit1.text w we wszystkich polach w tabelce mysql o takiej budowie:

CREATE TABLE av_kontgrup (
id mediumint(11) NOT NULL auto_increment,
nazwa varchar(250) NOT NULL default '',
nazwa2 varchar(250) NOT NULL default '',
nazwa3 varchar(250) NOT NULL default '',
PRIMARY KEY (id)
) TYPE=MyISAM;

dzięki bardzo za help, pozdrawiam :)

0

oki, działa piękine :)))

Mógłyś im wyjaśnić tylko to:
Data.dSQL.SQL.Add('INSERT INTO av_kontgrup values(0, :nazwa)');
Data.dSQL.ParamByName('nazwa').AsString := Edit1.Text;

rozumiem że to 1 to zapytanie, tylko dlaczego tam jest 0 i ":nazwa" ??

To 0 to wartość pola, które jest ustawione na Auto increment - MySQL sam sobie liczy wartość, jaka powinna się tam znaleźć. :nazwa to zmienna, której warość jest przypisywana linijkę niżej.

a gdybym chciał powiedzmy zapisać zawartość Edit1.text w we wszystkich polach w tabelce mysql o takiej budowie:

CREATE TABLE av_kontgrup (
id mediumint(11) NOT NULL auto_increment,
nazwa varchar(250) NOT NULL default '',
nazwa2 varchar(250) NOT NULL default '',
nazwa3 varchar(250) NOT NULL default '',
PRIMARY KEY (id)
) TYPE=MyISAM;

To byś musiał dać :

Data.dSQL.SQL.Add('INSERT INTO av_kontgrup values(0, :nazwa, :nazwa, :nazwa)');
Data.dSQL.ParamByName('nazwa').AsString := Edit1.Text;
0

działa, super - dzięki B A R D Z O :)))))))))

0

Hej,
znalazłem jeszcze 1 problem.... ;( Chodzi mianowicie o dłuuugie zapytanie:
Data.dsKontra.SQL.Add('UPDATE Kontrahenci SET nazwa=:n1,kodpocztowy=:k1,miasto=:m1,nip=:nip,regon=:r1,woj:=woj,nrkonta:=
nr1,grupa:=grupa,rabat:=rabat,limitkredytu=:limitkredytu,tel1=:t1,tel2=:t2,fax:=f
ax,email=:em,www:=w,grupatow:=gr1,notatka:=no1,logo:=lo1,naleznosci=:nal1,s
umazakup:=suma1 WHERE kod=:kod');

Delphi przy kompilacji wywala mi taki error:
[Error] kontraedit.pas(179): String literals may have at most 255 elements

wiesz może co zrobić żeby skompilował????

Robie tym Twoim sposobem......... :)

Pozdrawiam Łukasz

0

Argument funkcji Add ma za dużo znaków (czyli więcej niż 255). Spróbuj rozbić to na kilka zapytań.

0

a tak można??

tzn powiedzmy że podziele to na 2 części (to wyjdzie minej niż te 255 znaków na 1 ciąg) - to przejdzie??

0

Chodziło mi o coś takiego :
Zamiast :

Data.dsKontra.SQL.Add('UPDATE Kontrahenci SET nazwa=:n1,kodpocztowy=:k1,miasto=:m1,nip=:nip,regon=:r1,woj:=woj,nrkonta:=
nr1,grupa:=grupa,rabat:=rabat,limitkredytu=:limitkredytu,tel1=:t1,tel2=:t2,fax:=f
ax,email=:em,www:=w,grupatow:=gr1,notatka:=no1,logo:=lo1,naleznosci=:nal1,s
umazakup:=suma1 WHERE kod=:kod');

dajesz :

Data.dsKontra.SQL.Add('UPDATE Kontrahenci SETnazwa=:n1, kodpocztowy=:k1, miasto=:m1, nip=:nip, regon=:r1, woj:=woj, nrkonta:=nr1, grupa:=grupa
WHERE kod=:kod');

Data.dsKontra.SQL.Add('UPDATE Kontrahenci SETrabat:=rabat, limitkredytu=:limitkredytu, tel1=:t1, tel2=:t2, fax:=fax, email=:em, www:=w, grupatow:=gr1, notatka:=no1, logo:=lo1, naleznosci=:nal1, sumazakup:=suma1 
WHERE kod=:kod');
0

oki, już próbuje ...:)

btw. powiedzmy że mam taką tabelke:
CREATE TABLE av_kontgrup (
id mediumint(11) NOT NULL auto_increment,
nazwa varchar(250) NOT NULL default '',
PRIMARY KEY (id)
) TYPE=MyISAM;

i teraz w edit1.text dodaje pozycje do "nazwa" - da się jakoś sprawdzić przed zapisem do bazy czy wpis sięnie będzie dublować??

0

Nie da się.

0

mam SQL error ;((

Data.qrKontra.SQL.Add('UPDATE Kontrahenci SET nazwa=:n1, kodpocztowy=:k1, miasto=:m1, nip=:nip, regon=:r1, woj=:woj, nrkonta=:nr1, grupa=:grupa WHERE kod=:kod');
Data.qrKontra.SQL.Add('UPDATE Kontrahenci SET rabat=:rabat,
limitkredytu=:limitkredytu, tel1=:t1, tel2=:t2, fax=:fax, email=:em, www=:w, grupatow=:gr1, notatka=:notatka, logo=:lo1, naleznosci=:nal1, sumazakup=:suma1 WHERE kod=:kod');

przy tym ;(

0

To był przykład, po każdym zapytaniu musisz dać Data.dSQL.ParamByName oraz Add i Open.

0

zrobiłem tak:

Data.qrKontra.Sql.Clear;
Data.qrKontra.SQL.Add('UPDATE Kontrahenci SET nazwa=:n1, kodpocztowy=
:k1, miasto=:m1, nip=:nip, regon=:r1, woj=:woj, nrkonta=:nr1, grupa=:grupa
WHERE
kod=:kod');
Data.qrKontra.ParamByName('kod').AsString := DBEdit4.Text;
Data.qrKontra.ParamByName('n1').AsString := DBEdit2.Text;
Data.qrKontra.ParamByName('k1').AsString := DBEdit3.Text;
Data.qrKontra.ParamByName('m1').AsString := DBEdit4.Text;
Data.qrKontra.ParamByName('nip').AsString := DBEdit5.Text;
Data.qrKontra.ParamByName('r1').AsString := DBEdit6.Text;
Data.qrKontra.ParamByName('woj').AsString := DBEdit7.Text;
Data.qrKontra.ParamByName('nr1').AsString := DBEdit8.Text;
Data.qrKontra.ParamByName('grupa').AsString := DBEdit3.Text;
try
Data.qrKontra.ExecSQL;
Data.qrKontra.SQL.Clear;
Data.qrKontra.SQL.Add('UPDATE Kontrahenci SET rabat=:rabat, limitkredytu=:limitkredytu, tel1=:t1, tel2=:t2, fax=:fax, email=:em, www=:w, grupatow=:gr1, notatka=:notatka, logo=:logo12, naleznosci=:nal1, sumazakup=:suma1 WHERE kod=:kod');
Data.qrKontra.ParamByName('rabat').AsString := DBEdit10.Text;
Data.qrKontra.ParamByName('limitkredytu').AsString := DBEdit9.Text;
Data.qrKontra.ParamByName('t1').AsString := DBEdit11.Text;
Data.qrKontra.ParamByName('t2').AsString := DBEdit12.Text;
Data.qrKontra.ParamByName('fax').AsString := DBEdit13.Text;
Data.qrKontra.ParamByName('em').AsString := DBEdit14.Text;
Data.qrKontra.ParamByName('w').AsString := DBEdit15.Text;
Data.qrKontra.ParamByName('gr1').AsString := DBEdit4.Text;
Data.qrKontra.ParamByName('notatka').AsString := DBMemo1.Text;
Data.qrKontra.ParamByName('logo12').AsString := DBEdit16.Text;
Data.qrKontra.ParamByName('nal1').AsString := DBText1.caption;
Data.qrKontra.ParamByName('suma1').AsString := DBEdit2.Text;
Data.qrKontra.Open;
except
ShowMessage('Błąd aktualizacji danych, proszę spróbować ponownie!!!');

i nie wiem czemu pisze: DBEdit16 Field logo not found -dlaczego??

0

Widocznie nie masz takiego pola w tabeli.

0

mam to pole w bazie....

0

coś zrobiłem i teraz wywala : qrKontra:Parametr logo not found

0

qurcze,niby wszystko oki a jest MySQL SYNTAX Error... mógłbyś mi powiedzieć co jest nie tak??

Data.qrKontra.Sql.Clear;
Data.qrKontra.SQL.Add('UPDATE Kontrahenci SET nazwa=:n1, kodpocztowy=:k1, miasto=:m1, nip=:nip, regon=:r1, woj=:woj,
nrkonta=:nr1, grupa=:grupa, rabat=:rabat, limitkredytu=:limitkredytu
WHERE kod=:kod');
Data.qrKontra.ParamByName('kod').AsString := Edit1.Text;
Data.qrKontra.ParamByName('n1').AsString := Edit2.Text;
Data.qrKontra.ParamByName('k1').AsString := Edit3.Text;
Data.qrKontra.ParamByName('m1').AsString := Edit4.Text;
Data.qrKontra.ParamByName('nip').AsString := Edit5.Text;
Data.qrKontra.ParamByName('r1').AsString := Edit6.Text;
Data.qrKontra.ParamByName('woj').AsString := Edit7.Text;
Data.qrKontra.ParamByName('nr1').AsString := Edit8.Text;
Data.qrKontra.ParamByName('grupa').AsString := Label25.Caption;
Data.qrKontra.ParamByName('rabat').AsString := Edit15.Text;
Data.qrKontra.ParamByName('limitkredytu').AsString := Edit14.Text;
try
Data.qrKontra.ExecSQL;
Data.qrKontra.SQL.Clear;
Data.qrKontra.SQL.Add('UPDATE Kontrahenci SET tel1=:t1, tel2=:t2,
fax=:fax, email=:em, www=:w, grupatow=:gr1, notatka=:nota,
naleznosci=:nal1, sumazakup=:suma1 WHERE kod=:kod');
Data.qrKontra.ParamByName('kod').AsString := Edit1.Text;
Data.qrKontra.ParamByName('t1').AsString := Edit9.Text;
Data.qrKontra.ParamByName('t2').AsString := Edit10.Text;
Data.qrKontra.ParamByName('fax').AsString := Edit11.Text;
Data.qrKontra.ParamByName('em').AsString := Edit12.Text;
Data.qrKontra.ParamByName('w').AsString := Edit13.Text;
Data.qrKontra.ParamByName('gr1').AsString := Label23.caption;
Data.qrKontra.ParamByName('nota').AsString := edytor.Lines.Text;
Data.qrKontra.ParamByName('nal1').AsString := Label26.caption;
Data.qrKontra.ParamByName('suma1').AsString := Label24.Caption;
Data.qrKontra.Open;
Data.qrKontra.Close;
Data.qrKontra.SQL.Add('select *from kontrahenci ORDER BY nazwa ASC');
Data.qrKontra.Open;
except
ShowMessage('Błąd aktualizacji danych, proszę spróbować ponownie!!!');

0

może te zapytaina jakoś inaczej powinny być zapisane??

1 użytkowników online, w tym zalogowanych: 0, gości: 1