Pobieranie wartości z bazy.

Pobieranie wartości z bazy.
BZ
  • Rejestracja: dni
  • Ostatnio: dni
0

witam mam mały problem odnośnie pobierania wartości z bazy danych
mianowicie:

tabela baza
ID|data1|dara2|

Kopiuj
x:=now; // np: 11/11/11 11:11:11
ADDCommand.CommandText:='INSERT INTO baza (data,data2) VALUE (data1,'+x+')';
ADDCommand.Execute;
 

to działa bez zarzutu, ale jak próbuje pobrać ID to mi nic nie wyświetla

Kopiuj
ADDCommand.CommandText:='SELECT id FROM baza WHERE data2 LIKE '+x;
ADDCommand.Execute;

ADOCommand.Execute.Fields[0]
 

(czy jakoś tak już nie pamiętam)

i nic sie nie dzieje
ale gdy z bazy pobiorę datę
i wpisze coś takiego

Kopiuj
ADDCommand.CommandText:='SELECT id FROM baza WHERE data2 LIKE "11/11/11 11:11:11"';
ADDCommand.Execute;

//to w tym
ADOCommand.Execute.Fields[0]
 

znajduje sie moje poszukiwane ID ...
teraz pytanie
jak mam zrobić aby po podaniu kolejnego pola do bazy pobrać jego aktualne ID

Kopiuj
x:=now;
ADDCommand.CommandText:='INSERT INTO baza (data,data2) VALUE (data1,'+x+')';
ADDCommand.Execute;
ADDCommand.CommandText:='SELECT id FROM baza WHERE data2 LIKE '+x;
ADDCommand.Execute;
 

to nie działa

Proszę o wyrozumiałość i pomoc w tej kwestii

  • Rejestracja: dni
  • Ostatnio: dni
0

Jeżeli to mssql to po insercie dodaj:

Kopiuj
select @@identity

Pozdrawiam
Paweł Dmitruk

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
1
Kopiuj
ADDCommand.CommandText:='INSERT INTO baza (data,data2) VALUE (data1,"'+FormatDateTime('dd/mm/yy hh:nn:ss',x)+'")';
ADDCommand.CommandText:='SELECT id FROM baza WHERE data2 LIKE "'+FormatDateTime('dd/mm/yy hh:nn:ss',x)+'"';
BZ
  • Rejestracja: dni
  • Ostatnio: dni
0

Odpowiedź dotycząca powyższego problemu została rozwiązana, dzięki pomocy użytkownika "_13th_Dragon"
ale miałbym jeszcze jedno pytanie... Jeżeli można.
mianowicie jak wysyłam zapytanie o jedną wartość to jest ok

Kopiuj
ADDCommand.CommandText:='SELECT id FROM baza WHERE data2 LIKE "11/11/11 11:11:11"';
ADDCommand.Execute;

ale jak chciałbym pobrać kilka rekordów np:.

Kopiuj
ADDCommand.CommandText:='SELECT * FROM tablica WHERE data2 LIKE "11/11/11 11:11:11"';
ADDCommand.Execute;

wówczas dane pierwszego rekordu mam zawarte w:

Kopiuj
ADDCommand.Execute.Fields.Items[x].Value;

jak mam odczytać dane kolejnych rekordów?

bo takie polecenie w ogóle nie działa

Kopiuj
ADDCommand.Execute.MoveNext;

bardzo bym prosił o odpowiedź.

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

Dopóki miałeś błąd w rozumowaniu SQL'a to nie interesowało mnie czym jest obiekt ADDCommand ponieważ podałeś że inne polecenie z tym samym obiektem tobie działa jak należy.
Teraz pytasz jak się tym posługiwać, więc dopóki nie powiesz co to takiego to nikt kto nie posiada magicznej kuli nie będzie w stanie ci odpowiedzieć.

BZ
  • Rejestracja: dni
  • Ostatnio: dni
0

W sumie to sam nie wiem co to jest, nie potrafię tego określić bo korzystałem z różnych źródeł,
ale głównie odnosić to ma się do pobierania i zapisywania danych w bazie MS Access.

W Delphi 7 były jakieś tam komponenty typu ADO i z nich właśnie korzystam.
Chciałem ujednolicić kod programu ponieważ w jednej części korzystam z komponentu "tablicy"
a innej części z komponentu "Command".

Szczegółowych źródeł obecnie nie przytoczę ponieważ środowisko na którym pracuję obecnie znajduje się
poza moim dostępem. Zauważyłem że w obiekcie typu "ADOCommand" wpisuję zwykłe polecenia SQL
i mam możliwość operowania na pobranym rekordzie, dlatego chciałem się dowiedzieć jak
mógłbym zmieniać (odczytywać następny) rekord z bazy.

Ułatwiło by mi to dalszą pracę / zabawę i jednocześnie upiększyło kod programu.

ps. Nie jest to żadne błaganie o pomoc czy coś innego
jeżeli opisuję swój problem strasznie nie jasno / niezrozumiale to nie oczekuję
by ktoś korzystał z "magicznej kuli" i domyślał się o co mi chodzi.
Lecz jeżeli problem jest ewidentnie banalny jak z tym powyżej
tu w kodzie jest akurat błąd

Kopiuj
x:=now; // np: 11/11/11 11:11:11
ADDCommand.CommandText:='INSERT INTO baza (data,data2) VALUE (data1,'+x+')';
ADDCommand.Execute;

ponieważ x nie jest typem Datetime a Stringiem

Kopiuj
x:=DateTimeToStr(now);

w ten sposób to nie działało i nie rozumiałem dlaczego

po dodaniu twojego sposobu problem zniknął.

wracając do sedna
Obecny problem polega na niemożności (braku wiedzy)
jak przesunąć rekord na następną pozycję.

Korzystając z obiektu "ADOTable" wystarczyło wpisać coś takiego

Kopiuj
ADOTable.Next;

a w obiekcie "ADOCommand" nie mam pojęcia jak tego dokonać;

Za ewentualną chaotyczność mojej wypowiedzi przepraszam.
Z poważaniem "szary użytkownik" ...

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

Właściwie to do select'a bardziej pasuje TADOQuery a nie TADOCommand.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.