ADOQuery błąd przy próbie filtrowania

Problemy związane z tworzeniem i zarządzaniem programami bazo-danowymi.
Regulamin działu


Zadając pytania dotyczące baz danych należy podawać szczegółowe informacje o bazie danych nad którą się pracuje, czyli:

  • Rodzaj serwera bazodanowego: MySql, MSSQL, Oracle itp.
  • Wersja bazy danych
  • Technologia bazodanowa używana w programie: ADO, DbExpress, InterBase
  • Komponenty użyte do zestawienia połączenia: ADOConnection, SqlConnection
  • Sposób zestawienia komponentów bazodanowych np. DataSet - DataSource - DbGrid lub DataSet - DataSetProvider - ClientDataSet - DataSource - DbGrid
  • Jeżeli używane były biblioteki innych firm niż Borland, CodeGeer i Embarcadero proszę podać ich nazwy, numer wersji i adres źródła.

ADOQuery błąd przy próbie filtrowania

Nowy postprzez Ho88it » piątek, 11 września 2009, 10:35

Cytat z postu "dbExpress i MSSQL 8, Zestawienie połącznienia."
banita napisał(a):Co do ADO to kiedys pisalem taki sytem podpowiedzi (sugerowanie co uzytkownik moze wprowadzic w danym polu, mozliwe wartosci pobierane z bazy np kody pocztowe). podczas wprowadzanai danych rozwija sie lista ktora parsowala sugerowane wyniki zgodnie z tym co zostalo juz wprowadzone. parsowanie opieralo sie o filtrowanie wynikow w ADOQuery i DBGrid, calosc chodzi pieknie i nie ma problemow z oodswiezaniem.

jesli chcesz odczytac wartosci z komorek w DBGrid to musisz odwolac sie do obiektu TADOQueery ktory jest polaczony z tym gridem. bezposrednio do tego query albo za posrednictwem wlasciwosci datasource, data set ....


Dla rozwiania wątpliwości.
ADOQuery->SQL->Text -używane do połączenia kilku tabel w jedną (inner join, outer join.. itp), nie przewiduję filtrowania przez kwerendę bo program ma być jak najbardziej intuicyjny.
ADOQuery->Filter - tym filtruję wyniki zwrócone z kwerendy (filtrowanie wyników można dostrzec przez zmianę paska pionowego przewijania DBGrid1, ale nie na arkuszu DBGrid1).

Kod: Zaznacz cały
void __fastcall TForm1::Edit1KeyUp(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
if (Key==VK_RETURN){
        if (Edit1->Text!=""){
           ADOQuery1->Filtered=false;
           ADOQuery1->Filter=ComboBox1->Text+" Like '*"+Edit11->Text+"*'";//combobox przechowuje nazwy kolumn, edit1 to treść filtra
           ADOQuery1->Filtered=true;//teraz powinno odbyć się filtrowanie i DBGrid1 powinno się odświerzyć

        }else
         
        ADOQuery1->Filtered=false;

}
}


Jeżeli zamiast ADOQuery1 wstawie ADOTable1 to wszystko działa bez zarzutu ale nie mam potrzebnych danych z innych tabel..
Ostatnio edytowano środa, 16 września 2009, 15:18 przez Ho88it, łącznie edytowano 2 razy
Internet Explorer to program, który służy do przeglądania internetu z twojego komputera i na odwrót.
Avatar użytkownika
Ho88it
Homos antropiczny
Homos antropiczny
 
Posty: 63
Dołączył(a): niedziela, 10 sierpnia 2008, 20:53
Podziękował : 2
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: Visual Studio 2008
Visual Studio 2010
Gadu Gadu: 0
    NieznanyNieznana

Re: dbExpress i MSSQL 8, Zestawienie połącznienia.

Nowy postprzez banita » piątek, 11 września 2009, 12:59

ADOQuery1->Filtered

ustaw raz na true. pozniej tylko zmieniac warunek filtru bez wlacz/wylacz i zobacz czy cos pomaga.
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
Podziękował : 1
Otrzymał podziękowań: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    NieznanyNieznana

Re: dbExpress i MSSQL 8, Zestawienie połącznienia.

Nowy postprzez Ho88it » poniedziałek, 14 września 2009, 10:03

Nie działa... ale pojawiło się coś ciekawego... Po wprowadzeniu treści filtra ręcznie z takimi ustawieniami:

ADOQuery1->Active=true
ADOQuery->Filtered=false
ADOQuery->Filter="nzw_Kont Like '*wp*'"

po zmianie ADOQuery->Filtered=true filtr działa w środowisku... :o ale bez kompilacji programu...
po programowym ustawieniu takich parametrów w zdarzeniu OnKeyUp i uruchomieniu nic takiego się nie dzieje... Co dziwne, po naciśnięciu [ENTER] windows wydaje dźwięk "Ding.wav", a powinien po zwolnieniu klawisza!! a nigdzie w programie nie mam użytej funkcji OnKeyDown lub OnKeyPress.

Tak wygląda hierarchia obiektów na formie.
F1 i F2 to TEdit, a PanelKontrahenta i PanelDokumentów to zwykły TPanel.
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
Internet Explorer to program, który służy do przeglądania internetu z twojego komputera i na odwrót.
Avatar użytkownika
Ho88it
Homos antropiczny
Homos antropiczny
 
Posty: 63
Dołączył(a): niedziela, 10 sierpnia 2008, 20:53
Podziękował : 2
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: Visual Studio 2008
Visual Studio 2010
Gadu Gadu: 0
    NieznanyNieznana

Re: dbExpress i MSSQL 8, Zestawienie połącznienia.

Nowy postprzez banita » poniedziałek, 14 września 2009, 13:28

dla jakiego komponentu obslugujesz to OnKeyUp?

ja filtrowalem w edicie. zdarzenie onchange edita i w momencie wprowadzania nowych znakow gird sie pieknie filtrowal.
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
Podziękował : 1
Otrzymał podziękowań: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    NieznanyNieznana

Re: dbExpress i MSSQL 8, Zestawienie połącznienia.

Nowy postprzez Ho88it » poniedziałek, 14 września 2009, 13:37

Oczywiście dla TEdit .. OnKeyUp używam bo OnChange się wykrzacza jeżeli w treści filtra nigdzie nie będzie * a wartość Edit1->Text będzie pusta.. wyskoczy błąd, że szukana wartość nie może być NULL (w przypadku tabel MASTER-DETAIL).
Najgorsze, że wszystko działa jak filtruje się pod środowiskiem lub ADOQuery zastąpi się ADOTable.
Spróbuje użyć OnChange ale jestem sceptyczny.. :?
Internet Explorer to program, który służy do przeglądania internetu z twojego komputera i na odwrót.
Avatar użytkownika
Ho88it
Homos antropiczny
Homos antropiczny
 
Posty: 63
Dołączył(a): niedziela, 10 sierpnia 2008, 20:53
Podziękował : 2
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: Visual Studio 2008
Visual Studio 2010
Gadu Gadu: 0
    NieznanyNieznana

Re: dbExpress i MSSQL 8, Zestawienie połącznienia.

Nowy postprzez banita » poniedziałek, 14 września 2009, 13:49

a jak dasz w onchange:

Kod: Zaznacz cały
   if(dynamic_cast<TEdit*>(Sender)->Text.IsEmpty())
   {
      data_set_->Filter = "";   
      return;
   }
   try
   {
      data_set_->Filter = filter_field_ + " LIKE '" + dynamic_cast<TEdit*>(Sender)->Text + "*'";
  }

Za ten post autor banita otrzymał podziękowanie od:
Ho88it
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
Podziękował : 1
Otrzymał podziękowań: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    NieznanyNieznana

Re: dbExpress i MSSQL 8, Zestawienie połącznienia.

Nowy postprzez Ho88it » poniedziałek, 14 września 2009, 14:24

No... działa... :D teraz wytłumacz mi czemu dopiero przez dynamiczne rzutowanie a nie normalnie... Na przyszłość uniknę podobnych problemów.
Internet Explorer to program, który służy do przeglądania internetu z twojego komputera i na odwrót.
Avatar użytkownika
Ho88it
Homos antropiczny
Homos antropiczny
 
Posty: 63
Dołączył(a): niedziela, 10 sierpnia 2008, 20:53
Podziękował : 2
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: Visual Studio 2008
Visual Studio 2010
Gadu Gadu: 0
    NieznanyNieznana

Re: dbExpress i MSSQL 8, Zestawienie połącznienia.

Nowy postprzez banita » poniedziałek, 14 września 2009, 14:50

nie ma znaczenie czy odwolasz sie bezposrednio do tego edita czy poprzez wskaznik TObject ktory wywolal owe zdarzenie.
w moim przypadku zdarzenie bylo uzywane przez kilka komponentow wiec kosytalem z rzutowania i wskaznika TObject.
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
Podziękował : 1
Otrzymał podziękowań: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    NieznanyNieznana

Re: dbExpress i MSSQL 8, Zestawienie połącznienia.

Nowy postprzez Ho88it » środa, 16 września 2009, 15:06

banita napisał(a):nie ma znaczenie czy odwolasz sie bezposrednio do tego edita czy poprzez wskaznik TObject ktory wywolal owe zdarzenie.
[...]

Powinno tak być.. ale chyba jest inaczej..

Ten sposób który podałeś jest dobry w przypadku wywołania zdarzenia przez obiekt.. a ja potrzebuję też zdefiniować na sztywno pewne schematy tworzenia raportu wg. filtrowanych wyników z kwerend
(zmiana kwerendy -> ładowanie kwerendy -> uruchomienie kwerendy -> filtrowanie wyników -> podgląd raportu).
Problem znów mnie trapi ten sam. Jaka jest tego przyczyna, że przy próbie użycia filtru "statycznego" wywala błąd "Nie można otworzyć filtru".
Problem dotyczy TYLKO ADOQuery.

Przykładowe filtrowanie kwerendy przy wyborze jednej z opcji menu podręcznego:
Kod: Zaznacz cały
void __fastcall TForm1::Kontrahenta1Click(TObject *Sender)// moja nazwa opcji w PopUpMenu
{
QRaport->Filtered=false;//QRaport to ADOQuery
QRaport->Filter= "nzf_IdAdresu LIKE '*" + GridKontrahenci->Fields[10]->Value + "*'";//GridKontrahenci to DBGrid
QRaport->Filtered=true;
RDluznik->PRaport->Preview();//RDluznik to QReport
}
//---------------------------------------------------------------------------
Internet Explorer to program, który służy do przeglądania internetu z twojego komputera i na odwrót.
Avatar użytkownika
Ho88it
Homos antropiczny
Homos antropiczny
 
Posty: 63
Dołączył(a): niedziela, 10 sierpnia 2008, 20:53
Podziękował : 2
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: Visual Studio 2008
Visual Studio 2010
Gadu Gadu: 0
    NieznanyNieznana

Re: ADOQuery błąd przy próbie filtrowania

Nowy postprzez banita » środa, 16 września 2009, 20:59

a czy GridKontrahenci nie jest podpiety do QRaport?
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
Podziękował : 1
Otrzymał podziękowań: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    NieznanyNieznana

Re: ADOQuery błąd przy próbie filtrowania

Nowy postprzez Ho88it » czwartek, 17 września 2009, 09:33

Połączenie jest takie:
Kod: Zaznacz cały
DBGrid->DataSource = DSKontrahenci //TDataSource
DSKontrahenci->DataSet = QKontrahenci //TADOQuery
QKontrahenci->Connection = DBConnect //TADOConnect


Czyli podpięty jest przez TDataDource. A to coś złego?
Ostatnio edytowano środa, 14 października 2009, 09:44 przez Ho88it, łącznie edytowano 2 razy
Internet Explorer to program, który służy do przeglądania internetu z twojego komputera i na odwrót.
Avatar użytkownika
Ho88it
Homos antropiczny
Homos antropiczny
 
Posty: 63
Dołączył(a): niedziela, 10 sierpnia 2008, 20:53
Podziękował : 2
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: Visual Studio 2008
Visual Studio 2010
Gadu Gadu: 0
    NieznanyNieznana

Re: ADOQuery błąd przy próbie filtrowania

Nowy postprzez banita » czwartek, 17 września 2009, 10:01

chyba sie zagubilem i teraz nie wiem w czym problem:).

dodam tez ze filtorwac mozesz tylko pola tekstowe. jesli pole jest np numeric to pobierajac je z bazy musisz je rzutowac na text
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
Podziękował : 1
Otrzymał podziękowań: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    NieznanyNieznana

Re: ADOQuery błąd przy próbie filtrowania

Nowy postprzez Ho88it » czwartek, 17 września 2009, 10:39

I pewnie też dynamicznie, bo występuje opcja wyboru kolumny wg. której ma się odbywać filtrowanie i zmieniają się typy danych.
Zrobienie tego w ten sposób, na przykład nie przejdzie..

Kod: Zaznacz cały
void __fastcall TForm1::Kontrahenta1Click(TObject *Sender)
{
int Id=GridKontrahenci->Fields[10]->Value;// na próbę bez dynamicznego rzutowania

QRaport->Filtered=false;
QRaport->Filter= "nzf_IdAdresu LIKE '*" + IntToStr(Id) + "*'";
QRaport->Filtered=true;

RDluznik->PRaport->Preview();
}

Też wywala błąd po skompilowaniu i próbie filtrowania...
Internet Explorer to program, który służy do przeglądania internetu z twojego komputera i na odwrót.
Avatar użytkownika
Ho88it
Homos antropiczny
Homos antropiczny
 
Posty: 63
Dołączył(a): niedziela, 10 sierpnia 2008, 20:53
Podziękował : 2
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: Visual Studio 2008
Visual Studio 2010
Gadu Gadu: 0
    NieznanyNieznana

Re: ADOQuery błąd przy próbie filtrowania

Nowy postprzez banita » czwartek, 17 września 2009, 10:47

rzutowanie musi sie odbyc na poziomie wyciagania danych z bazy.

przykladowo pole jest numeryczne, ty zrzutujesz je na text w programie, to nic nie da bo faktycznie filtrowany zbior nadal pracuje na typie numerycznym. musisz wyciagajac dane wygiagnac je jako text.
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
Podziękował : 1
Otrzymał podziękowań: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    NieznanyNieznana

Re: ADOQuery błąd przy próbie filtrowania

Nowy postprzez Ho88it » czwartek, 17 września 2009, 12:59

TADOQuery ma opcję ustawiania parametrów. Pierwszy raz bym czegoś takiego używał i nie wiem czy dobrze kombinuje. W załączniku na zrzucie ekranu zaznaczyłem kolorem ciekawe opcje.
Parametry kierunku przepływu danych Direction:
Kod: Zaznacz cały
pdInput
pdInputOutput
pdOutput
pdReturnValue
pdUnknown


Nie wiem jak tego użyć a w helpie spławiają do MSDN :). Pogrzebię..
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
Internet Explorer to program, który służy do przeglądania internetu z twojego komputera i na odwrót.
Avatar użytkownika
Ho88it
Homos antropiczny
Homos antropiczny
 
Posty: 63
Dołączył(a): niedziela, 10 sierpnia 2008, 20:53
Podziękował : 2
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: Visual Studio 2008
Visual Studio 2010
Gadu Gadu: 0
    NieznanyNieznana

Następna strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Bazy danych

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 4 gości