Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datensatz auswählen, mit ListBox oder ComboBox (https://www.delphipraxis.net/24018-datensatz-auswaehlen-mit-listbox-oder-combobox.html)

abi 14. Jun 2004 10:25


Datensatz auswählen, mit ListBox oder ComboBox
 
Hallo :hi:

ich habe folgendes Problem, ich habe mehrere DBs.

Meine Haupttabelle hat ein Elementnames

ArbeiterID

diese veweist wieder auf eine andere DB mit dem namen Arbeiter
in dieser ist enthalten.

Nummer
Vorname
Nachname
Abteilung

Jetzt wollte ich das in meiner ListBox oder ComboBox nicht nur der Vorname, sondern auch der Nachname steht. :o

Da ich dieses schon in einem anderen Thread weit geht diskutiert habe und heraus gefunden habe. Das man dieses nur mit der ListBox oder ComboBox machen kann und nicht mit der Lookup....Box. :hello:

Ich habe jetzt eine ListBox und eine ComboBox gemacht. In denen meine Arbeiter drin stehen.

Wenn ich jetzt eine ListBox nehme kann ich aber keine Arbeiter auswählen
und
wenn ich die ComboBox nehme kann ich auch nichts auswählen. :wall:

Ich machen alles mit Tables.

Vielleicht liegt das Problem daran, aber dafür kenne ich mich zuwenig aus.
Wenn ich einen neuen Datensatz einfügen will, gehe ich nur über meine Haupttabelle und nicht übermeine Arbeiter Tabelle.

Diesen Befehl nutze ich dafür.
Delphi-Quellcode:
Datenmodul.DataModule2.taGeber.Append;
Ich hoffe das ihr mein Problem verstanden habt.

Schon mal danke für eure Antworten.

mfg
abi

Albi 14. Jun 2004 10:42

Re: Datensatz auswählen, mit ListBox oder ComboBox
 
Ich habe auch mit Table - Kompos angefangen und bin dann aber ganz schnell zu Querys gewechselt.

Du kannst dir den Vornamen und Namen ganz einfach wie in den anderen Thread beschrieben anzeigen lassen, das sollte ja funktioniert haben.

Nun zu deinem Problem.

Öffne mal ein neues Project und ersetze die Table durch eine Query.
Versuch einfach mal folgenden Code um die Daten in einer LISTBOX anzeigen zu lassen.

Im OP bei DatabaseName schreibst du einfach den Pfad der DB (aber nur den Pafd ohne den DB Namen) rein und in SQL einfach den folgenden Code.

Code:
Select * From DB
Jetzt kannst Du dir testweise ein DBGrid auf Form ziehen und noch eine DataSource. Nun verknüpfst Du eine die DS mit dem Query und das Grid mit der DS. Active = true setzen und du hast die Daten im Grid zu stehen.

Nun änderst Du den Code aus dem anderen Thread von mir etwas ab und ersetzt die Table durch die Query.

Das ganze in die OnCreate - Ereignis eingetragen und beim start sollten dann alle Vornamen und Namen in der Listbox drinstehen.

Versuch das erstmal und dann machen wir weiter.

Ein kleiner Tip von, am besten kaufst Du dir ein Buch über DB-Programmierung. Ich mußte es mir auch kaufen, da das Thema sehr umfangreich.

abi 14. Jun 2004 10:53

Re: Datensatz auswählen, mit ListBox oder ComboBox
 
Hallo Albi
schon das du mir wieder hilfst, werde des jetzt gleich mal ausprobieren.

Aber ich hab da mal wieder eine Frage die nicht zum Thema gehört.

Welches Buch würdes du mir empfehlen, hab Delphi 5.

Kann es sein das man mit Delphi 6 schon besser mit Datenbank arbeiten kann. Da ich zur Zeit ein Buch hab für Delhi 6.

abi

Albi 14. Jun 2004 11:04

Re: Datensatz auswählen, mit ListBox oder ComboBox
 
Ich habe mir das Buch Programmieren lernen in Delphi 7 gekauft, dort gehen die Autoren erst auf Grundlagenwissen ein und später ausführlich auf die Datenbankprogrammierung ein. In meinen Augen für Einsteiger in diese Matterie genau das richtige.

Bücher zu diesem Thema gib es hier.

abi 14. Jun 2004 11:10

Re: Datensatz auswählen, mit ListBox oder ComboBox
 
Hallo Albi
soweit habe ich des jetzt.

Jetzt stehen in meiner ListBox, die Vornamen und die Nachnamen.

abi 14. Jun 2004 12:15

Re: Datensatz auswählen, mit ListBox oder ComboBox
 
Hallo Albi
kannst du mir weiter helfen, was muss ich denn jetzt machen. :roll:

abi

Albi 14. Jun 2004 12:28

Re: Datensatz auswählen, mit ListBox oder ComboBox
 
So ab hier wird es etwas komplizierter. Ich werde dir hier nicht den kompletten Code dafür geben. Nur einen Link der dir zeigt wie geht.

Du hast nun die 2 Felder deiner DB zusammengeführt und kannst diese nicht einfach auswerten, dafür müst du die string erst wieder zerlegen. Hier wird gezeigt wie es geht.

Und hier ist noch die Query-Abfrage der DB.

Code:
With Query1 Do
  Begin
    Close;
    SQL.Clear;
    SQL.Add('Select * from DBMandanten.db WHERE (MVorname LIKE "'+Label1.Caption+'")'
           +'AND (MName LIKE "'+Label2.Caption+'")');
    open;
  end;
Label1 und Label2.Caption habe ich nur so ausgewählt es können auch ganz einfach Variablen sein.

abi 14. Jun 2004 12:33

Re: Datensatz auswählen, mit ListBox oder ComboBox
 
Hallo Albi
dann fang ich mal an damit.

Danke

abi

abi 14. Jun 2004 14:31

Re: Datensatz auswählen, mit ListBox oder ComboBox
 
Hallo Albi
bekomme des zwar alles zum laufen aber brauche ich des überhaupt. :gruebel:

Irgendwie stehe ich gerade auf dem Schlauch. :wall:

Du hast mir geschreiben.

Zitat:

Und hier ist noch die Query-Abfrage der DB.

Code:
With Query1 Do
  Begin
    Close;
    SQL.Clear;
    SQL.Add('Select * from DBMandanten.db WHERE (MVorname LIKE "'+Label1.Caption+'")'
           +'AND (MName LIKE "'+Label2.Caption+'")');
    open;
  end;
Label1 und Label2.Caption habe ich nur so ausgewählt es können auch ganz einfach Variablen sein
Jetzt hab ich in Label1 'Wilhelm' und in Label2 'Horst' stehen. Jetzt zeigt mir meine Tabelle alle Arbeiter an die Wilhelm Horst hiessen.

Damit sortiere ich doch nur meine Abfrage. :shock:

Dann habe ich auch noch deinen Link ausprobiert.

Zitat:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var str: string;
begin
   while pos(';',strl.text) > 0 do
     begin
     listbox1.Items.Add(copy(strl.text, 1, pos(';',strl.text)-1));
     str :=strl.text;
     delete(str,1,pos(';',str));
     strl.text := str
   end;
end;

Aber da brauch ich ja einen TListString und sowas hab ich doch gar nicht. Ausserdem will ich von meiner ListBox raus schreiben nicht rein schreiben. :?: :(

Dann habe ich noch was probiert.
Zitat:

Zitat:

Zitat von hboy
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  end;

var
  Form1: TForm1;
var
  zeile: Array[0..10] of string[255];

implementation

{$R *.dfm}

const
sep = ';';

procedure zerlegen(s: string);
var
currentitem:integer;
i: integer;

  procedure nextitem;
  begin
    inc(currentitem);
    zeile[currentitem] := '';
  end;

begin
  currentitem :=-1;
  nextitem;
  for i :=1 to length(s) do
  begin
    if s[i] <> sep then
      zeile[currentitem] := zeile[currentitem] + s[i]
    else
      nextitem;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
  memo1.Clear;
  zerlegen(edit1.Text);
  for i:=0 to 10 do memo1.Lines.Add(zeile[i]);
end;

end.


Aber damit zerlege ich auch nur das was ich eintippe. :cry:

Vielleicht liege ich gerade total falsch. :wiejetzt: Aber brauche ich das überhaupt alles. :gruebel:

Ich will doch nur meine ListBox oder ComboBox zum Auswählen nehmen. Und dann kann ich doch auch den Index nehmen. Und da ich bei meiner Arbeiter Tabelle eine laufende Varialbe Deklariert habe. Ist dieser doch auch nicht so verschieden zum Index.

Aber ich kann bis jetzt immer noch nichts bei meiner ListBox oder ComboBox auswählen. :cry:

Kann des sein das sich mein Problem erübrigen würde wenn ich die EnterpriseVersion :idea: hätte.

Denn ich habe in deinem Link einen gefunden, bei dem ging es mit Semikola und dieser hatte Delphi5 Enterprise.

Ich hab ja nur Delphi5 Proffesional.

mfg
abi

Albi 14. Jun 2004 16:32

Re: Datensatz auswählen, mit ListBox oder ComboBox
 
Hallo abi,

jetzt versteh ich gar nichts mehr von dem was du machen willst. Erst willst Du nur den Namen und Vornamen in der ListBox anzeigen. Dann soll der n:1 Beziehung werden und jetzt wieder nicht. Dann willst Du über die Listbox einen Datensatz einfügen.

Was willst Du soll den Ergebnis sein? :gruebel:

Ich habe mir jetzt alle Beiträge zu diesem Thema von dir mal angeschaut. Willst Du in der ListBox wo der Wilhelm drinsteht den Namen auswählen und zu diesem dann einen neuen DS anlegen?

Ich werde das Gefühl nicht los, das wir hier die ganze Zeit aneinander vorbeireden.

Albi 15. Jun 2004 06:25

Re: Datensatz auswählen, mit ListBox oder ComboBox
 
So wir haben jetzt die Arbeiter in der ListBox drinstehn, was soll jetzt passieren, wenn du einen Arbeiter auswählst?

Sag mal, steht in deiner Haupttabelle nur eine Nummer oder hat diese Tabelle noch weitere Felder?

abi 15. Jun 2004 08:21

Re: Datensatz auswählen, mit ListBox oder ComboBox
 
Guten Morgen Albi
dann versuche ich dir nochmal meinen Aufbau zuerklären. :-D

Meine Hauptabelle sieht so aus. "Geber Datenbank"

Nummer
Geber Bezeichnung
Device Name
Knotennummer
Baudrate ID //dies ist eine Nummer
Hardware Version ID //dies ist eine Nummer
Software Version ID //dies ist eine Nummer
Preset Wert
...
Arbeiter ID //dies ist eine Nummer
Datum
Bemerkung
//alle anderen Werte werden direkt eingegeben

Dann habe ich noch eine 4 weiter Tabellen.
1. Baudrate
2. Hardware Version
3. Software Version
4. Arbeiter

Die Tabellen Baudrate, Hardware Version und Software Version haben nur zwei Spalten.
Die erste ist immer die Nummer und die Zweite, ein fester Wert.

Nur meine Arbeiter Tabelle hat mehrere Spalten.
Nummer //ist die gleiche wie die Arbeiter ID
Vorname
Nachname
Abteilung


Jetzt zu dem was ich machen wollte. :witch:

Wenn ich jetzt einen neuen Datensatz eingeben will, dann kann ich dies auch machen.

Aber ich kann von meinen Neben Tabellen immer nur ein Wert in meiner ListBox oder ComboBox anzeigen. Deshalb wollte ich das dort mehr drin steht.

Da sich die Arbeiter, was ich zumindest hoffe, nicht so schnell ändern. Sind dies feste Werte und man wählt halt einen bestimmten aus.

Das heisst falls ein neuer Arbeiter hinzu kommt, muss dieser extra eingegeben werden. Dies erfolgt also nicht über die Haupttabelle. Das ist auch kein Problem.

Also hab ich eine N:1 beziehung. Da mehre Geber auch denn gleichen Arbeiter haben können.
Aber es kann z.b. kein Geber zwei Arbeiter haben. Immer nur einen.

Ich hoffe du weisst was ich haben will. Falls nicht frag mich nur. Da ich das erstemal mit Datenbank was mache, mache ich bestimmt vieles Falsch. :angle:

ciao
abi

Albi 15. Jun 2004 08:37

Re: Datensatz auswählen, mit ListBox oder ComboBox
 
Guten morgen,

also müßte es im Moment so bei dir aussehen, das wenn ein Geber mehrere Arbeiter hat, der Geber dann in deiner Haupttabelle mehrmals auftaucht. So hab ich das doch jetzt richtig verstanden, oder?

abi 15. Jun 2004 08:47

Re: Datensatz auswählen, mit ListBox oder ComboBox
 
Guten Morgen

Ja und nein, da hab ich was vergessen.

Jeden Geber gibt es nur einmal und da dazu gibt es auch immer nur ein Arbeiter. Da bedeutet es wird niemals ein Geber zweimal vorkommen.

Wollte das mit dem Arbeiter hier machen, damit man weiss wer diesen Geber eingetragen hat.

Aber ansonst würde ich schon sagen das du mich jetzt verstanden hast.

abi

Albi 15. Jun 2004 09:00

Re: Datensatz auswählen, mit ListBox oder ComboBox
 
Dann gehört doch zu jedem Geber nur ein Arbeiter und nicht mehrere Arbeiter zu einem Geber. Wenn das so ist, dann würd ich das gleich in eine Tabelle schreiben.

abi 15. Jun 2004 09:08

Re: Datensatz auswählen, mit ListBox oder ComboBox
 
Des hab ich mir auch schon überlegt. :gruebel:

Aber dann habe ich mir gedacht :idea: , wenn jetzt z.B. 50 Geber mit dem Arbeiter Anton Müller haben und 50 Geber mit dem Arbeiter Bernd Bauer haben. Dann müsste man ja jedesmal denn Arbeiter neu eingeben.

Um dies zu vermeiden wollte ich für meine Arbeiter eine extra Tabelle machen.

Ich würde des lieber so machen.

Albi 15. Jun 2004 09:20

Re: Datensatz auswählen, mit ListBox oder ComboBox
 
Gut jetzt weiß ich was du willst. Dann erstellst Du dir noch ne Hilfstabelle. In der dann die Daten aus dem Geber und Arbeiter zusammenlaufen. Jeder Geber und Arbeiter steht jeweils nur einmal in der jeweiligen DB drin. Und in der Hilfstabelle werden dann über die jeweiligen Primärschlüssel die Bezüge hergestellt.

z.B. in der ListBox stehen jetzt alle Geber drin, wenn du einen auswählst steht in der anderen Listbox oder besser einen Grid die jeweilig dazugehörigen Arbeiter drin.

Das ganze kann das so aussehen. Der Geber Müller hat die ID 1 und Arbeiter Schmidt hat die ID 2, dann steht in der Hilfstabelle nur GID 1 un die AID 2. Somit mußt du nur einmal den Geber und Arbeiter in jeweiligen Tabelle ablegen und dann nur die ID in die Hilfstabelle schreiben.

abi 15. Jun 2004 09:31

Re: Datensatz auswählen, mit ListBox oder ComboBox
 
Hallo Albi
auf die Idee mit der Hilfstabelle bin ich gar nicht gekommen. Hört sich auf jedenfall gut an. :thuimb:

Jetzt noch mal zur erklärung. :wiejetzt:

Dann brauche ich jetzt noch eine weitere Tabelle bei dem jeder Geber eine Numer hat und jeder Arbeiter.

Meine Hilfstabelle sieht dann so aus?

Geber Nr
Arbeiter Nr

Und über diese mache ich dann alle meine zuweisungen, oder?

abi

Albi 15. Jun 2004 09:37

Re: Datensatz auswählen, mit ListBox oder ComboBox
 
Ja genau, das ganze heißt Relationales DB-System. Die Nummer sind die Primärschlüssel des jeweiligen Datensatzes. Somit hast du einen eindeutigen Bezug zu den jeweiligen DS in der Tabelle.

Und wie ich das eben geschrieben habe mit dem Anzeigen deiner Ds hattest du es doch gewollt, oder?

abi 15. Jun 2004 09:46

Re: Datensatz auswählen, mit ListBox oder ComboBox
 
Danke Albi :cheers:
ja genau genau so wollte ich des.

Dann werde ich das mal mit dem der Hilfstabelle probieren.
:dancer: :witch: :dancer2:
Mercy nochmal ohne dich währe ich niemals drauf gekommen.

ciao :hi:

abi

Albi 15. Jun 2004 09:48

Re: Datensatz auswählen, mit ListBox oder ComboBox
 
Versuch das aber nicht den Table kompos. Nehme besser die Querys ansonsten wird es sehr schwer werden, denke ich.

Wenn jetzt noch Fragen auftauchen, dann einfach fragen.

abi 15. Jun 2004 09:53

Re: Datensatz auswählen, mit ListBox oder ComboBox
 
Ok, mache ich. Danke für denn Tip.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:57 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz