/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
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



Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409080
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste