Avatar billede topsite Nybegynder
17. marts 2002 - 12:57 Der er 25 kommentarer og
1 løsning

Løkke med data fra access

Hej eksperter..

Jeg har noget kode, som ikke er lykkedes for mig. Jeg skal lave en løkke der kører data ud fra en access-base.

Jeg har fået fat i følgende.. men det virker ikke helt.
Den tager kun den første post i databasen.
  DB.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=imdb.mdb;Persist Security Info=False';

DB.Close;

DB.CommandText := 'Select * from buddies where user=''' + Split[1] + '''';

DB.Open;

while not DB.EOF do
  begin
    socket.SendText(#5 + '0666' + #5 + DB.Fields.FieldByName('buddy').AsString + #5);

    DB.Next;

  end;


Håber i kan hjælpe
Avatar billede dj Nybegynder
17. marts 2002 - 13:45 #1
kan du ikke lige nævne hvilken klasse DB er ?
Avatar billede dkn Nybegynder
17. marts 2002 - 13:58 #2
var
i:integer;
begin
DB.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=imdb.mdb;Persist Security Info=False';

DB.Close;
DB.CommandText := 'Select * from buddies where user=''' + Split[1] + '''';
DB.Open;

for i := 0 to DB.RecordCount do
begin
socket.SendText(#5 + '0666' + #5 + DB.Fields.FieldByName('buddy').AsString + #5);
DB.Next;
end;
end;

men det er en ret dum måde at gøre det på. Det ville være smarte hvis du først gemte de buddies som var det i en list, og så sendte hele listen på engang istedet for at belaste socket forbindelsen med det loop.
Avatar billede topsite Nybegynder
17. marts 2002 - 14:10 #3
Lyder smart DKN hvordan ville du sætte det op??
Avatar billede topsite Nybegynder
17. marts 2002 - 14:14 #4
Den sender stadig kun en:

if Split[0] = '0665' then
begin
DB.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=imdb.mdb;Persist Security Info=False';

DB.Close;
DB.CommandText := 'Select * from buddies where user=''' + Split[1] + '''';
DB.Open;

for ii := 0 to DB.RecordCount do
begin
socket.SendText(#5 + '0666' + #5 + DB.Fields.FieldByName('buddy').AsString + #5);
DB.Next;
end;
end;

Clienten der modtager:

if Split[0] = '0666' then
begin
showmessage('Du modtager en adresseliste fra server');
ListItem := form1.ListView1.Items.Add;
ListItem.ImageIndex := 0;
ListItem.Caption := Split[1];
end;
Avatar billede topsite Nybegynder
17. marts 2002 - 14:15 #5
Og min database [Buddies - Tabel]

user    buddy
admin    jaxo
admin    danic
admin    gæst
danic    gæst
danic    jaxo
danic    admin
jaxo    admin
jaxo    danic
jaxo    gæst
Avatar billede topsite Nybegynder
17. marts 2002 - 14:15 #6
Den sender kun Jaxo, nå jeg logger ind med admin..

Den sender kun Gæst nå jeg logger ind med danic..
Avatar billede dkn Nybegynder
17. marts 2002 - 14:16 #7
send lige din db, så kan jeg se det lidt bedre
Avatar billede topsite Nybegynder
17. marts 2002 - 14:16 #8
Ok
Avatar billede dkn Nybegynder
17. marts 2002 - 14:16 #9
if Split[0] = '0665' then
begin
DB.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=imdb.mdb;Persist Security Info=False';

DB.Close;
DB.CommandText := 'Select * from buddies where user=''' + Split[1] + '''';
DB.Open;

for ii := 0 to DB.RecordCount do
begin
socket.SendText(#5 + '0666' + #5 + DB.Fields[1].AsString + #5);
DB.Next;
end;
end;
Avatar billede topsite Nybegynder
17. marts 2002 - 14:18 #10
kan ikke se rettelserne :)??
Avatar billede dkn Nybegynder
17. marts 2002 - 14:19 #11
socket.SendText(#5 + '0666' + #5 + DB.Fields.FieldByName('buddy').AsString + #5);

er lavet om til:
socket.SendText(#5 + '0666' + #5 + DB.Fields[1].AsString + #5);
Avatar billede topsite Nybegynder
17. marts 2002 - 14:24 #12
Ser ikke helt rigtigt ud til at virke..
Det virker så'n første gang..
kan du lave et eksempel hvor den sender det hele afsted på en gang
Avatar billede dj Nybegynder
17. marts 2002 - 14:25 #13
var der stadig ik lige en af jer der kunne fortælle mig hvilken klasse DB er ? Syntes ikke lige jeg har nogle DB klasser der har de metoder der.
Avatar billede dkn Nybegynder
17. marts 2002 - 14:28 #14
Var
St:Tstringlist;

if Split[0] = '0665' then
begin
DB.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=imdb.mdb;Persist Security Info=False';

DB.Close;
DB.CommandText := 'Select * from buddies where user=''' + Split[1] + '''';
DB.Open;
St:=Tstringlist.create;
for ii := 0 to DB.RecordCount do
begin
St.add(DB.Fields[1].AsString);
DB.Next;
end;
socket.SendText(#5 + '0666' + #5 +st.text + #5);
st.free;
end;
Avatar billede topsite Nybegynder
17. marts 2002 - 14:30 #15
Hvordan modtaget clienten det, og sætter det på en ViewList1
Avatar billede dkn Nybegynder
17. marts 2002 - 14:37 #16
Var
St:Tstringlist;
i:integer;

if Split[0] = '0666' then
begin
showmessage('Du modtager en adresseliste fra server');
St:=Tstringlist.create;
st.text := split[1];
for i := 0 to st.count-1 do
begin
ListItem := form1.ListView1.Items.Add;
ListItem.ImageIndex := 0;
ListItem.Caption := St.strings[I];
end;
st.free;
end;
Avatar billede topsite Nybegynder
17. marts 2002 - 14:40 #17
Clienten laver fejl:
List index out of bounds
Avatar billede topsite Nybegynder
17. marts 2002 - 14:49 #18
Min database [Buddies - Tabel]

user    buddy
admin    jaxo
admin    danic
admin    gæst
danic    gæst
danic    jaxo
danic    admin
jaxo    admin
jaxo    danic
jaxo    gæst

Nå jeg logger ind med admin bliver min ListView1 sådan her:

Jaxo
Danic
Gæst
Gæst

Logger jeg ind med Danic bliver den:

Gæst
Jaxo
Admin
Admin

Altså to af den sidste
Avatar billede topsite Nybegynder
17. marts 2002 - 15:13 #19
Vi klare det med
for ii := 0 to DB.RecordCount do
til
for ii := 0 to DB.RecordCount -1 do

Takker DKN.. Du får lige lidt flere points for den rigtig gode hjælp..
Avatar billede dj Nybegynder
17. marts 2002 - 15:54 #20
Topsite: Kunne du stadig ik lige svare på hvilken komponent du benytter ? Kunne godt tænke mig at kigge lidt på det selv :)
Avatar billede topsite Nybegynder
17. marts 2002 - 16:07 #21
Hæhæ ;)
det er det der er indbygget i delphi 6 pro+
Avatar billede dj Nybegynder
17. marts 2002 - 16:43 #22
mm så er det jo herligt man sidder med Delphi 5 pro :)
Avatar billede topsite Nybegynder
17. marts 2002 - 19:14 #23
hæhæ :) køb en upgrade den er ikke så dyr...
Avatar billede dj Nybegynder
17. marts 2002 - 19:26 #24
koster den ik 3k ?
Avatar billede topsite Nybegynder
17. marts 2002 - 19:42 #25
Borland.com
Avatar billede dj Nybegynder
17. marts 2002 - 22:34 #26
hehe ja, men 399$ er også lidt mere end jeg vil gi for den upgrade, specielt når jeg ikke har noget desideret at bruge de nye features til .. tror jeg venter en version mere :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

Seneste spørgsmål Seneste aktivitet
I går 21:00 Libre Office Impress Af Frank i Andre styresystemer
I går 11:47 VB script Af Jenshentze i Word
I går 11:21 Popup ved opstart Af mort1 i Windows
04/0918:50 Slet lokal konto Af ErikHg i Windows
04/0916:05 Ændre tal i en celle Af xvid i Excel