Zapytania z wykorzystaniem ComboBox

0

Witam wszystkich forumowiczow, jestem nowy na forum, szukalem podobnego przykladu, ale niestety nic nie znalazlem wiec pytam, mianowicie:

Pobralem nazwy z bazy mySQL za pomoca:
begin
ListView1.Items.Clear;
ComboBox1.items.Clear;
amortyzacja.SQLDataSet1.CommandText := 'SELECT * FROM srodki ORDER BY nazwa_srodka';
amortyzacja.SQLDataSet1.Open;
//-1 ponieważ rekordy liczone są od 0 a nie od 1
for I := 0 to amortyzacja.SQLDataSet1.RecordCount-1 do
begin
ListItem := ListView1.Items.Add;
ListItem.Caption := amortyzacja.SQLDataSet1.FieldValues['id'];
ListItem.SubItems.Add(amortyzacja.SQLDataSet1.FieldValues['nr_ew']);
ListItem.SubItems.Add(amortyzacja.SQLDataSet1.FieldValues['nazwa_srodka']);
ListItem.SubItems.Add(FloatToStr(amortyzacja.SQLDataSet1.FieldValues['wartosc_poczatkowa_srodka']) );
ListItem.SubItems.Add(FloatToStr(amortyzacja.SQLDataSet1.FieldValues['bierzaca_wartosc_amortyzacji_sr']));
ListItem.SubItems.Add(FloatToStr(amortyzacja.SQLDataSet1.FieldValues['pozostala_wartosc_srodka']));
ListItem.SubItems.Add(FloatToStr(amortyzacja.SQLDataSet1.FieldValues['miesieczna_amortyzacja']) );
ListItem.SubItems.Add(FloatToStr(amortyzacja.SQLDataSet1.FieldValues['roczna_amortyzacja']));
ListItem.SubItems.Add(amortyzacja.SQLDataSet1.FieldValues['data_przyjecia_srodka']);
ListItem.SubItems.Add(amortyzacja.SQLDataSet1.FieldValues['data_calkowitej_amortyzacji']);
ComboBox1.Items.Add(amortyzacja.SQLDataSet1.FieldValues['nazwa_srodka']);
amortyzacja.SQLDataSet1.Next;
end;
amortyzacja.SQLDataSet1.Close;
end;

oczywiscie nazwa_srodka to jedna z kolum mojej tabeli, powyzsza prodecure podpialem pod OnShow dla formy, wszystko jest ok, ale potrzebuje jeszcze dla nazwy wybranej z ComboBox'a azeby w ListView wyswietlic tylko te dane ktorych nazwa_srodka = nazwie wybranej przez uzytkownika z ComboBox'a.

Probowalem podpiac pod OnChange dla ComboBox'a:
var
nazwa_srodka:AnsiString;
begin
ListView1.Items.Clear;
ComboBox1.items.Clear;
nazwa_srodka:=user.Items.Values['nazwa_srodka'];
SQLquerry:='SELECT * FROM srodki WHERE nazwa_srodka='+nazwa_srodka+' ORDER BY nazwa_srodka;';
amortyzacja.SQLDataSet1.Open;
//-1 ponieważ rekordy liczone są od 0 a nie od 1
for I := 0 to amortyzacja.SQLDataSet1.RecordCount-1 do
begin
ListItem := ListView1.Items.Add;
ListItem.Caption := amortyzacja.SQLDataSet1.FieldValues['id'];
ListItem.SubItems.Add(amortyzacja.SQLDataSet1.FieldValues['nr_ew']);
ListItem.SubItems.Add(amortyzacja.SQLDataSet1.FieldValues['nazwa_srodka']);
ListItem.SubItems.Add(FloatToStr(amortyzacja.SQLDataSet1.FieldValues['wartosc_poczatkowa_srodka']) );
ListItem.SubItems.Add(FloatToStr(amortyzacja.SQLDataSet1.FieldValues['bierzaca_wartosc_amortyzacji_sr']));
ListItem.SubItems.Add(FloatToStr(amortyzacja.SQLDataSet1.FieldValues['pozostala_wartosc_srodka']));
ListItem.SubItems.Add(FloatToStr(amortyzacja.SQLDataSet1.FieldValues['miesieczna_amortyzacja']) );
ListItem.SubItems.Add(FloatToStr(amortyzacja.SQLDataSet1.FieldValues['roczna_amortyzacja']));
ListItem.SubItems.Add(amortyzacja.SQLDataSet1.FieldValues['data_przyjecia_srodka']);
ListItem.SubItems.Add(amortyzacja.SQLDataSet1.FieldValues['data_calkowitej_amortyzacji']);
amortyzacja.SQLDataSet1.Next;
end;
amortyzacja.SQLDataSet1.Close;
end;

progrma sie kompiluje, ale jak tylko chce cos wybrac z ComboBox'a dostaje komunikat o bledzie:
"Missing query, table name or procedure name". Moze ktos podpowie gdzie jest blad (ew. jak go usunac?)
Pozdrawiam

0

nazwa_srodka:=user.Items.Values['nazwa_srodka'];

1)Przeciez piszesz ze nazwa_srodka ma byc wybrana z ComboBoxa, wiec powinno byc tak:

nazwa_srodka:=ComboBox1.Text;

ComboBox1.items.Clear; po co to wtedy ?
2) Daj Append zamiast Add w ComboBoxi1.

Reszty nie sprawdzam dopoki nie bedzie sformatowany kod.

0

Poprawilem jak radziles - faktycznie bez sensu to bylo [glowa]
Jednak nadal dostaje ten sam komunikat o bledzie :/

Poprawiony kod prezentuje sie tak:
<d e="e" l="l" p="p" h="h" i="i">
OnShow Formy:

begin
ListView1.Items.Clear;
amortyzacja.SQLDataSet1.CommandText := 'SELECT * FROM srodki ORDER BY nazwa_srodka';
amortyzacja.SQLDataSet1.Open;
//-1 ponieważ rekordy liczone są od 0 a nie od 1
for I := 0 to amortyzacja.SQLDataSet1.RecordCount-1 do
begin
ListItem := ListView1.Items.Add;
ListItem.Caption := amortyzacja.SQLDataSet1.FieldValues['id'];
ListItem.SubItems.Add(amortyzacja.SQLDataSet1.FieldValues['nr_ew']);
ListItem.SubItems.Add(amortyzacja.SQLDataSet1.FieldValues['nazwa_srodka']);
ListItem.SubItems.Add(FloatToStr(amortyzacja.SQLDataSet1.FieldValues['wartosc_poczatkowa_srodka']) );
ListItem.SubItems.Add(FloatToStr(amortyzacja.SQLDataSet1.FieldValues['bierzaca_wartosc_amortyzacji_sr']));
ListItem.SubItems.Add(FloatToStr(amortyzacja.SQLDataSet1.FieldValues['pozostala_wartosc_srodka']));
ListItem.SubItems.Add(FloatToStr(amortyzacja.SQLDataSet1.FieldValues['miesieczna_amortyzacja']) );
ListItem.SubItems.Add(FloatToStr(amortyzacja.SQLDataSet1.FieldValues['roczna_amortyzacja']));
ListItem.SubItems.Add(amortyzacja.SQLDataSet1.FieldValues['data_przyjecia_srodka']);
ListItem.SubItems.Add(amortyzacja.SQLDataSet1.FieldValues['data_calkowitej_amortyzacji']);
ComboBox1.Items.Append(amortyzacja.SQLDataSet1.FieldValues['nazwa_srodka']);
amortyzacja.SQLDataSet1.Next;
end;
amortyzacja.SQLDataSet1.Close;
end;

OnChange ComboBox'a.
var
nazwa_srodka:AnsiString;
begin
ListView1.Items.Clear;
nazwa_srodka:=ComboBox1.Text
SQLquerry:='SELECT * FROM srodki WHERE nazwa_srodka='+nazwa_srodka+' ORDER BY nazwa_srodka;';
amortyzacja.SQLDataSet1.Open;
//-1 ponieważ rekordy liczone są od 0 a nie od 1
for I := 0 to amortyzacja.SQLDataSet1.RecordCount-1 do
begin
ListItem := ListView1.Items.Add;
ListItem.Caption := amortyzacja.SQLDataSet1.FieldValues['id'];
ListItem.SubItems.Add(amortyzacja.SQLDataSet1.FieldValues['nr_ew']);
ListItem.SubItems.Add(amortyzacja.SQLDataSet1.FieldValues['nazwa_srodka']);
ListItem.SubItems.Add(FloatToStr(amortyzacja.SQLDataSet1.FieldValues['wartosc_poczatkowa_srodka']) );
ListItem.SubItems.Add(FloatToStr(amortyzacja.SQLDataSet1.FieldValues['bierzaca_wartosc_amortyzacji_sr']));
ListItem.SubItems.Add(FloatToStr(amortyzacja.SQLDataSet1.FieldValues['pozostala_wartosc_srodka']));
ListItem.SubItems.Add(FloatToStr(amortyzacja.SQLDataSet1.FieldValues['miesieczna_amortyzacja']) );
ListItem.SubItems.Add(FloatToStr(amortyzacja.SQLDataSet1.FieldValues['roczna_amortyzacja']));
ListItem.SubItems.Add(amortyzacja.SQLDataSet1.FieldValues['data_przyjecia_srodka']);
ListItem.SubItems.Add(amortyzacja.SQLDataSet1.FieldValues['data_calkowitej_amortyzacji']);
amortyzacja.SQLDataSet1.Next;
end;
amortyzacja.SQLDataSet1.Close;
end;
<d e="e" l="l" p="p" h="h" i="i">

0
  1. Nie uzywamy FieldValues, zwraca on Variant. Uzycie funkcji FieldByName jest szybsze i wygodniejsze.
  2. Kod dawaj w znacznik <d e="e" l="l" p="p" h="h" i="i">, nadal jest niesformatowany (brak tego znacznika) wiec nie patrze na wiecej :-P
0
maciejmt napisał(a)
  1. Nie uzywamy FieldValues, zwraca on Variant. Uzycie funkcji FieldByName jest szybsze i wygodniejsze.
  2. Kod dawaj w znacznik <d e="e" l="l" p="p" h="h" i="i">, nadal jest niesformatowany (brak tego znacznika) wiec nie patrze na wiecej :-P

sformatowalem kod :-P

0

heh, znacznik specjalnie napisalem ze spacjami zeby mi nie robilo formatowania :-)

0
jawor1104 napisał(a)
maciejmt napisał(a)
  1. Nie uzywamy FieldValues, zwraca on Variant. Uzycie funkcji FieldByName jest szybsze i wygodniejsze.
  2. Kod dawaj w znacznik <d e="e" l="l" p="p" h="h" i="i">, nadal jest niesformatowany (brak tego znacznika) wiec nie patrze na wiecej :-P

sformatowalem kod :-P

Zmienilem FieldValues na FieldByName

ListItem := ListView1.Items.Add;
ListItem.SubItems.Add(amortyzacja.SQLQuery1.FieldByName('id').AsString);
ListItem.SubItems.Add(amortyzacja.SQLDataSet1.FieldByName('nr_ew').AsString);
ListItem.SubItems.Add(amortyzacja.SQLDataSet1.FieldByName('nazwa_srdoka').AsString);
ListItem.SubItems.Add(amortyzacja.SQLDataSet1.FieldByName('wartosc_poczatkowa_srodka').AsString);
ListItem.SubItems.Add(amortyzacja.SQLDataSet1.FieldByName('bierzaca_wartosc_amortyzacji_sr').AsString);
ListItem.SubItems.Add(amortyzacja.SQLDataSet1.FieldByName('pozostala_wartosc_srodka').AsString);
ListItem.SubItems.Add(amortyzacja.SQLDataSet1.FieldByName('miesieczna_amortyzacja').AsString);
ListItem.SubItems.Add(amortyzacja.SQLDataSet1.FieldByName('roczna_amortyzacja').AsString);
ListItem.SubItems.Add(amortyzacja.SQLDataSet1.FieldByName('data_przyjecia_srodka').AsString);
ListItem.SubItems.Add(amortyzacja.SQLDataSet1.FieldByName('data_calkowitej_amortyzacji').AsString);
ListItem.SubItems.Add(amortyzacja.SQLDataSet1.FieldByName('nazwa_srodka').AsString);
ComboBox1.Items.Append(amortyzacja.SQLDataSet1.FieldByName('nazwa_srdoka').AsString);

nie wiem tylko czy dobrze, bo blad jak byl tak jest ten sam [glowa] [glowa] [glowa] :/

0

Jesli o mnie chodzi do laczenia uzywam zeosow i one maja opcje filtered ustawiam ja na true i :

 qr.Close;
 qr.Filter = 'nazwa = ''' +ComboBox1.Caption + '''';
 qr.Open; 

Jesli np nie chcesz tracic fockusa to mozesz dodac jeszcze opcje qr.locate przed i po filtrze ale to juz zabawa czysto estetyczna ;)</delphi></delphi>

0
woolfik napisał(a)

Jesli o mnie chodzi do laczenia uzywam zeosow i one maja opcje filtered ustawiam ja na true i :

 qr.Close;
 qr.Filter = 'nazwa = ''' +ComboBox1.Caption + '''';
 qr.Open; 

Jesli np nie chcesz tracic fockusa to mozesz dodac jeszcze opcje qr.locate przed i po filtrze ale to juz zabawa czysto estetyczna ;)</delphi></delphi>

sciagnalem sobie zeosy, ale jak probuje instlowac to welug instrukcji z "http://www.gss.webd.pl/index.php?option=com_content&task=view&id=5&Itemid=2" to nie moge znaleźć pliku ZCore.bpl, może mi ktos podac skad wziac kompletna instale zeosow?

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