Entwickler-Ecke

Internet / Netzwerk - MySql Abfrage Splitten :)


Danny W. - Do 26.10.06 13:56
Titel: MySql Abfrage Splitten :)
Hallo an alle,
Ich habe hier meine MySql DB und meine Abfrage.

Die Tabelle USER enthält mehrere Datensätze.

meine frage ist, wie bekomme ich eine zeile in einen string (bzw. tstrings)?
ich möchte die einzelnen datenfelder dann mit einem Delimiter Splitten.
Den Code dafür habe ich bereits:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TForm1.Button1Click(Sender: TObject);
var
sl : tstrings;
i  : integer;
begin
    memo1.clear;
    sl := TStringList.Create;
    sl.Delimiter := ' '//Splitter
    sl.DelimitedText := edit1.text; //Soll durch einen MySQL Query ersetzt werden!
    edit2.text:=inttostr(sl.count);


  for i := 0 to sl.count-1 do
    memo1.lines.add(sl.strings[i]);

end;


Ich möchte jetzt pro 'sl' Variable, eine komplette zeile aus der datenbank bekommen!
Der Query an sich ist auch kein Problem. Allerdings weiß ich nicht wie und wo ich die Abfrage eingeben und ausgeben lassen soll.

mfG,
Mantis


Xion - Do 26.10.06 14:21


Delphi-Quelltext
1:
s1.DelimitedText:=Query.FieldByName('DBFeld').AsString;                    


so?


Danny W. - Do 26.10.06 14:24

user profile iconXion hat folgendes geschrieben:

Delphi-Quelltext
1:
s1.DelimitedText:=Query.FieldByName('DBFeld').AsString;                    


so?




ich würde das gerne testen, aber ich werde daraus leider nicht schlau ^^ ist der query eine funktion aus einer bestimmten komponente? was muss genau muss in das ('DBFeld')?

/EDIT
btw. Ich benutze Delphi 2005 PE mit Direct SQL :)

mfG


Xion - Do 26.10.06 14:36

öööh, ich kenn mich eingentlich nur mit BDE aus, aber:

Query ist ne Komponente, da steht der SQL-Code und wenn ich sage Query.ExecSQL oder Query.Open dann hab ich das Ergebnis da drin. Das kann ich per Query.FieldByName('DBFeld').AsString auslesen. Dann Query.Next => nächster Eintrag. 'DBFeld' steht hier für das Feld, also wenn du z.B. ne Tabelle mit Name, Vorname, Wohnort hast dann wäre z.B. Query.FieldByName('Name').AsString ne Möglichkeit...dachte du meinst so ein Query: (
user profile iconMantis1987 hat folgendes geschrieben:

sl.DelimitedText := edit1.text; //Soll durch einen MySQL Queryersetzt werden!
)


Danny W. - Do 26.10.06 14:57

tut mir leid, da hab ich mich ein wohl ein wenig unklar (doof^^) ausgedrückt :)

ich wollte damit eine abfrage starten die mir z.B. so etwas ausspuckt!

Mantis 28.07.1987 dannywitting@aol.com 208332033 blabla

(name, geb. datum, email, icq, motto oder so)

diesen string wollte ich dann einfügen, um ihn anschließend zu trennen :)

mfG


Xion - Do 26.10.06 15:05

ääääh...

wie machst denn du die Abfrage? Hast du keine Query-Komponente?


Danny W. - Do 26.10.06 15:21

doch doch ^^

ich hab das problem jetzt auch schon gelöst :)


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, directmysql4x;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit2: TEdit;
    Memo1: TMemo;
    label1: TLabel;
    Memo2: TMemo;
    Button2: TButton;
    db1: Tdirectmysql;
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;


implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
sl : tstrings;
i  : integer;
begin
    memo1.clear;
    sl := TStringList.Create;
    sl.Delimiter := ','//Splitter
    sl.DelimitedText := memo2.text; //der zu splittende text
    edit2.text:=inttostr(sl.count);
   
  for i := 0 to sl.count-1 do
    memo1.lines.add(sl.strings[i]);

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
memo1.clear;
memo2.clear;
end;

procedure TForm1.Button2Click(Sender: TObject);
var s:string;
befehl: string;
ts : tstrings;
begin
 if db1.Connect2MysqlDB('localhost','root','','bla',3306,s) then
 begin

  befehl:='SELECT `news`.`ueberschrift`, `news`.`text` FROM `news`';
  ts:=tstringlist.Create;
  db1.sendcmd(befehl,true,ts);
  memo2.lines.Assign(ts);
  ts.free;

 db1.DisConnectMysqlDB(s);
 end;
end;

end.


danke für die hilfe :)


Xion - Do 26.10.06 15:25

hmmm, ok, das ist wohl doch komplett anders als BDE ;)


gsmgrufti - Do 26.10.06 18:57

wo möchtest du eigentlich weitermachen ?
hier oder dort:
http://www.delphi-forum.de/topic_gridsdcp+fehlt_65850.html


Danny W. - Do 26.10.06 20:51

ernstgemeinte frage: Beides beantwortet!
nicht ernstgemeinte frage: Sind versch. themen! les dir das nochmal durch...das andere ist nur spezieller...dieses hier hab ich im nachhinein geöffnet, wo mir schon die wichtigsten sachen beantwortet wurden :|

mfG


gsmgrufti - Do 26.10.06 21:56

Na ja,
solltest nun beide Threads beenden und bei Datenbanken weitermachen :wink:


Danny W. - Fr 27.10.06 09:22

stimmt..die threads waren wirklich fast identisch...ich hab das halt nur damit gerechtfertigt, weil ich bei dem anderen halt schon weiter war und es spezieller wurde, entschuldigung dafür :oops:

Ich hab auf den anderen Thread leider bloß keinen 'Zugriff' mehr, weil das halt der account von meinem kumpel ist :( werde den thread aber melden, wahrscheinlich haben die mods da ja noch möglichkeiten :)


mfG,
Mantis