|
| InputQuery søgning på flerer poster? Fra : Monie Jacobsen |
Dato : 09-01-04 15:56 |
|
Hej
Jeg har forsøgt "mangt og meget" for, at få InputQuery til, at søge på flere
post'er.
Forstås således, at hvis første søgte post = navn ikke findes så søges der
i næste
post = efternavn osv.
I alt er der 5 poster der skal tjekkes for det søgte navn.
Benytter databasen MyBase fra Delphi 6
Databsenavn er: cdsKartotek
Min koder:
procedure TfrmMain.FindCtrlF1Click(Sender: TObject);
var
navn, efternavn : String;
begin
if InputQuery('Navn', 'Indtast navn', (Navn or efternavn)) then
cdsKartotek.Locate('Navn', navn, [loCaseInsensitive, loPartialKey])
else if
MessageDlg('Der blev ikke indskrevet noget navn..!',
mtInformation, [mbYes,mbNo], 0)= mrYes then
frmMain.FindCtrlF1Click(Sender);
end;
Med venlig hilsen
Mone Jacobsen
| |
Harald (09-01-2004)
| Kommentar Fra : Harald |
Dato : 09-01-04 22:00 |
|
"Monie Jacobsen" <post@sunwind.dk> skrev i en meddelelse
news:3ffec122$0$69988$edfadb0f@dread12.news.tele.dk...
> Hej
>
> Jeg har forsøgt "mangt og meget" for, at få InputQuery til, at søge på
flere
> post'er.
>
> Forstås således, at hvis første søgte post = navn ikke findes så søges
der
> i næste
>
> post = efternavn osv.
>
> I alt er der 5 poster der skal tjekkes for det søgte navn.
>
> Benytter databasen MyBase fra Delphi 6
>
> Databsenavn er: cdsKartotek
>
> Min koder:
>
> procedure TfrmMain.FindCtrlF1Click(Sender: TObject);
>
> var
>
> navn, efternavn : String;
>
> begin
>
> if InputQuery('Navn', 'Indtast navn', (Navn or efternavn)) then
>
> cdsKartotek.Locate('Navn', navn, [loCaseInsensitive, loPartialKey])
>
> else if
>
> MessageDlg('Der blev ikke indskrevet noget navn..!',
>
> mtInformation, [mbYes,mbNo], 0)= mrYes then
>
> frmMain.FindCtrlF1Click(Sender);
>
> end;
InputQuery har ikke noget med søgning i databaser at gøre. Da Locate er den
eneste søge mulighed i MyBase bliver du nød til at søge 5 gange, først navn
så efternavn osv.. Hvad hvis der er flere der har samme navn?
Løsningen må være at lave en procedure der søger efter de 5 poster en af
gangen og så putter resultaterne ind i et nyt dataset og returnere dette,
det kan dog også rimeligt nemt laves, jeg går ud fra at der er nogle
muligheder i MyBase for at sortere således at flere med sammen navn også kan
findes.
Her er lidt ideer:
Procedure StartSog(Tekst: string; Source, Target : TDataSet);
// der søges efter Tekst
var
SogeFelter : array[0..4.] of string;
i : integer;
begin
SogeFelter:=['Navn','Efternavn'.. osv.
Opret først samme felter i Target som findes i Source...
Create Target DataSet...
for i:=0 to 4 do
begin
if Source.Locate(SogeFelter,Tekst, ....
begin
kør evt. videre med Next her for at checke for flere ens
navne...
kopiere resultater over i Target
end;
end;
end;
begin
StartSog('Hansen',cdsKartotek, et nyt DataSet);
end;
Der skal lidt kode til. Hvis du brugte en database med SQL mulighed kunne
det samme ordnes i en enkelt linie, men det da lade sig gøre med MyBase.
Mvh
HK
| |
Monie Jacobsen (10-01-2004)
| Kommentar Fra : Monie Jacobsen |
Dato : 10-01-04 10:17 |
|
"Harald" <news10@-REMOVE-THIS-kroning.dk> skrev i en meddelelse
news:3fff1635$0$27439$edfadb0f@dread16.news.tele.dk...
> "Monie Jacobsen" <post@sunwind.dk> skrev i en meddelelse
> news:3ffec122$0$69988$edfadb0f@dread12.news.tele.dk...
> > Hej
> >
> > Jeg har forsøgt "mangt og meget" for, at få InputQuery til, at søge på
> flere
> > post'er.
> >
> > Forstås således, at hvis første søgte post = navn ikke findes så søges
> der
> > i næste
> >
> > post = efternavn osv.
> >
> > I alt er der 5 poster der skal tjekkes for det søgte navn.
> >
> > Benytter databasen MyBase fra Delphi 6
> >
> > Databsenavn er: cdsKartotek
> >
> > Min koder:
> >
> > procedure TfrmMain.FindCtrlF1Click(Sender: TObject);
> >
> > var
> >
> > navn, efternavn : String;
> >
> > begin
> >
> > if InputQuery('Navn', 'Indtast navn', (Navn or efternavn)) then
> >
> > cdsKartotek.Locate('Navn', navn, [loCaseInsensitive, loPartialKey])
> >
> > else if
> >
> > MessageDlg('Der blev ikke indskrevet noget navn..!',
> >
> > mtInformation, [mbYes,mbNo], 0)= mrYes then
> >
> > frmMain.FindCtrlF1Click(Sender);
> >
> > end;
>
> InputQuery har ikke noget med søgning i databaser at gøre. Da Locate er
den
> eneste søge mulighed i MyBase bliver du nød til at søge 5 gange, først
navn
> så efternavn osv.. Hvad hvis der er flere der har samme navn?
> Løsningen må være at lave en procedure der søger efter de 5 poster en af
> gangen og så putter resultaterne ind i et nyt dataset og returnere dette,
> det kan dog også rimeligt nemt laves, jeg går ud fra at der er nogle
> muligheder i MyBase for at sortere således at flere med sammen navn også
kan
> findes.
>
> Her er lidt ideer:
>
> Procedure StartSog(Tekst: string; Source, Target : TDataSet);
> // der søges efter Tekst
> var
> SogeFelter : array[0..4.] of string;
> i : integer;
> begin
> SogeFelter:=['Navn','Efternavn'.. osv.
>
> Opret først samme felter i Target som findes i Source...
>
> Create Target DataSet...
>
> for i:=0 to 4 do
> begin
> if Source.Locate(SogeFelter,Tekst, ....
> begin
> kør evt. videre med Next her for at checke for flere ens
> navne...
> kopiere resultater over i Target
> end;
> end;
> end;
>
> begin
> StartSog('Hansen',cdsKartotek, et nyt DataSet);
> end;
>
> Der skal lidt kode til. Hvis du brugte en database med SQL mulighed kunne
> det samme ordnes i en enkelt linie, men det da lade sig gøre med MyBase.
>
> Mvh
> HK
>
>
Tak Harald
Tak skal du havde.
Det er meget fint, at få nogle tips, man kan arbejde vider med/på.
Der er sjover hvis man selv kan løse problemmet! Gerne vider tips!
Med venlig hilsen
Monie Jacobsen
| |
|
|