Komponent DateTimePIcker1 a zapis do bazy

0

Witam, proszę was o pomoc, chciałbym aby w mojej bazie danych (Pacjenci) zapisywała sie wybrana przez komponenet DateTimePicker w kolumnie data_rejestracji.

Wrzuce może kod dodawania:

procedure TForm2.Button1Click(Sender: TObject);

var
id:integer;
begin
try
//operacja służąca do wybierania maksymalnego numeru
id:=StrToInt(pzapytanieSelect('Select Max(id) AS id FROM Pacjenci;',Form3.ADOQuery1,'id'));
except
//jeśli w bazie nie było żadnego wpisu to ustawiamy wartość klucza głównego na 0
id:=0;
end;
id:=id+1;//zwiększamy o 1 wartość klucza głównego
if (Edit1.Text<>) and (Edit2.Text<>) then //jeśli użytkownik wypełnił pola Edit, to znaczy wpisał Imię i Nazwisko(te pola są wymagane w bazie)
begin
//wywołujemy procedurę dodającą nowe dane do bazy danych

   zapytanieInsert_Update('INSERT INTO Pacjenci (id, Imie_i_nazwisko, Miejscowość, Nr_domu, Gmina, 

pesel, ubezpieczenie, icd, placówka_kierująca, lekarz_kierujący, data_rejestracji) VALUES ('+IntToStr(id)+',

+Edit1.Text+' '+Edit2.Text+, +ComboBox1.Text+, +Edit4.Text+, +ComboBox2.Text+, +ComboBox3.Text+, +ComboBox4.Text+, +ComboBox5.Text+, +ComboBox6.Text+, +ComboBox7.Text+, +DateTimePicker1.Name+);',Form3.ADOQuery1);

ADOConnection1.Connected:=False;//rozłączamy sie z bazą...
ADOConnection1.Connected:=True;//...i ponownie się z nią łączymy

   zapytanieSelect('SELECT * FROM Pacjenci',Form3.ADOQuery1);
end
else
   showmessage('Uzupelnij pola imię i nazwisko');
          begin
    Close;
   end ;

end;

Sczerze tak jak to dodałem to nie działa. Jak mam to zrobić ?

</b>
0

Spróbuj tak:

Query_Insert('INSERT INTO tabela (data_rejestracji) VALUES("'+DateToStr(Calendar.Date)+'");');

Osobiście też preferuję używanie funkcji Format

Query_Insert(Format('INSERT INTO tabela (data_rejestracji) VALUES ("%s"));', [DateToStr(Calendar.Date)]));
0

Dzięki zrobiłem coś takiego:

procedure TForm2.Button1Click(Sender: TObject);

var
id:integer;
Data : TDateTime;
begin
try

   id:=StrToInt(pzapytanieSelect('Select Max(id) AS id FROM Pacjenci;',Form3.ADOQuery1,'id'));

   except

   id:=0;
end;

id:=id+1;
if (Edit1.Text<>`) and (Edit2.Text<>`) then 
begin

  
   zapytanieInsert_Update('INSERT INTO Pacjenci (id, Imie_i_nazwisko, Miejscowość, Nr_domu, Gmina, pesel, ubezpieczenie, icd, placówka_kierująca, lekarz_kierujący, <span style="color: red">data_rejestracji </span>) VALUES ('+IntToStr(id)+', `+Edit1.Text+' '+Edit2.Text+`, `+ComboBox1.Text+`, `+Edit4.Text+`, `+ComboBox2.Text+`, `+ComboBox3.Text+`, `+ComboBox4.Text+`, `+ComboBox5.Text+`, `+ComboBox6.Text+`, `+ComboBox7.Text+`, <span style="color: red">`+DateToStr(date)+`</span>);',Form3.ADOQuery1);
   ADOConnection1.Connected:=False;
   ADOConnection1.Connected:=True;
   zapytanieSelect('SELECT * FROM Pacjenci',Form3.ADOQuery1);
end
else
   showmessage('Uzupelnij pola imię i nazwisko');
          begin
    Close;
   end ;

end;

I zapisuje do bazy date, ale tylko date 1900-01-01 niezależnie od tego jaka wybrałem, zawsze jest ta sama. Co musze zrobić żeby wpisywało mi datę jak wybrałem??

0

Nie moge zapisać tak jak mi podałes ponieważ wszystko musi być w jednym zapytaniu, otoż dlatego iż zapisuje mi te informacje pod jedno id..

0

A jak inicjujesz zmienną Data bo w kodzie nie widzę. Nie ma potrzeby używać dodatkowej zmiennej skoro TMonthCalendar ma pole Date.

Nie moge zapisać tak jak mi podałes ponieważ wszystko musi być w jednym zapytaniu

[glowa] kurde ja Ci tylko fragment podałem bo nie miało mi się na wklepywanie całego zapytania. Ja tylko pokazałem metodę wstawiania daty do tabeli. Myślenie nie boli.

Wklej mi SQLowy kod tworzący tabelę, pokażę Ci jak skrócić i uprościć zapis.

0

Spoko luzik już zrobiłem:
zapytanieInsert_Update('INSERT INTO Pacjenci (id, Imie_i_nazwisko, Miejscowość, Nr_domu, Gmina, pesel, ubezpieczenie, icd, placówka_kierująca, lekarz_kierujący, data_rejestracji) VALUES ('+IntToStr(id)+', +Edit1.Text+', '+Edit2.Text+, +ComboBox1.Text+, +Edit4.Text+, +ComboBox2.Text+, +Edit3.Text+, +ComboBox4.Text+, +ComboBox5.Text+, +ComboBox6.Text+, +ComboBox7.Text+, +DateToStr(DateTimePicker1.Date)+);',Form3.ADOQuery1);

wszystko działa jak trzeba :)

Mam jeszcze jedno pytanie chciałbym wyswietlić w np DBComboBox rekordy z bazy jak to zrobić?

0

Poradziłem sobie z wyświetlaniem ale teraz przy dodawaniu nowego Indeksu
Niestety wyskakuje mi bład. KOd programu wygląda tak:

procedure TForm2.Button1Click(Sender: TObject);

var
id:integer;
begin
try
id:=StrToInt(pzapytanieSelect('Select Max(id) AS id FROM Pacjenci;',Form3.ADOQuery1,'id'));
except
id:=0;
end;
id:=id+1;
if (Edit1.Text<>) and (Edit2.Text<>) then
begin

   zapytanieInsert_Update('INSERT INTO Pacjenci (id, Imie_i_nazwisko, <span style="color: red">Miejscowość</span>, Nr_domu, Gmina, pesel, ubezpieczenie, icd, placówka_kierująca, lekarz_kierujący, data_rejestracji) VALUES ('+IntToStr(id)+', `+Edit1.Text+', '+Edit2.Text+`, <span style="color: red">`+DBLookupComboBox2.KeyField+`</span>, `+Edit4.Text+`, `+ComboBox2.Text+`, `+Edit3.Text+`, `+ComboBox4.Text+`, `+ComboBox5.Text+`, `+ComboBox6.Text+`, `+ComboBox7.Text+`, `+DateToStr(DateTimePicker1.Date)+`);',Form3.ADOQuery1);
   ADOConnection1.Connected:=False;
   ADOConnection1.Connected:=True;
   zapytanieSelect('SELECT * FROM Pacjenci',Form3.ADOQuery1);
end
else
   showmessage('Uzupelnij pola imię i nazwisko');
          begin
    Close;
   end ;

end;

Na czerwono zaznaczyłem komponent o który mi chodzi.

Ustawiłem ListSource na Form3.DataSource1, KeyFiled na Miejscowosc, w Query SQL (SELECT * From Pacjenci;).
, wybieram z DBLoo... miejscowość z bazy i zapis i w tym momencie wykrzacza sie. z błedem DbLookupComboBox2:Filed'Miejscowość' not Found.
i wskazuje na zapis:

  id:=StrToInt(pzapytanieSelect('Select Max(id) AS id FROM Pacjenci;',Form3.ADOQuery1,'id'));

i tak:

  1. Jeżeli zrobimy coś takiego:
    // id:=StrToInt(pzapytanieSelect('Select Max(id) AS id FROM Pacjenci;',Form3.ADOQuery1,'id'));

Doda miejscowosć ale przydzieli najwikszy numer w id i nastepnej osoby już nie doda

Moze mi ktoś wytłumaczyć czemu tak, może źle ustawiłem parametry DBLoo....

0

Człowieku, trochę odbiegnę od tematu, ale pomogę nam wszystkim.
Po 1. Dajesz ledwo co czytelny kod. Nie obchodzą nas Twoje funkcje np: pzapytanie. Czyli zamiast

 id:=StrTopInt(pzapytanieSelect('Select....', jakiesinne, zdupywziete, argumenty));

napisz nam np:

 id:=zapytanie('Select....');

Po 2. Dajesz mnóstwo niepotrzebnych informacji.
Przykładowo nie interesuje nas warunek

if (edit cos tam) and (editInny cos tam) then....

Po 3. Naucz się używać funkcji format. Gwarantuję Ci, że za kilka dni(o ile jeszcze nie) nie będziesz wiedział co się dzieje w Twoim zapytaniu INSERT. A jeśli użyjesz funkcji format to raczej będziesz wiedział. Przykład:

Ty piszesz:

str:='INSERT INTO TABELA(POLE1, POLE2, POLE3, POLE4, POLE5) VALUES('+intToStr(id)+', '''+edit.text+''', '''+DateToStr(dtPicker.Date)+''', '+intToStr(wart)+', '''+edit2.text+'''';

A z użyciem format(i w miarę elegancko) wygląda to tak:

str:=format('INSERT INTO TABELA(POLE1, POLE2, POLE3, POLE4, POLE5) VALUES(%d, ''%s'', ''%s'', %d, ''%s'')', [id, edit.Text, DateToStr(dtPicker.Date), wart, edit2.Text]);

Prawda, że ładniej i czytelniej? :)

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