Autor Beitrag
kloti
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Di 28.01.03 18:25 
Hi @ all,

als erstes möchte ich vorweg schicken, dass ich, was Delphi betrifft, leider nicht sehr fit bin :(

Ich muß ein (Teil)Projekt bearbeiten, dass eben in Delphi erstellt werden soll.
Die Aufgabe ist ganz einfach.
Ich habe eine Excel Liste, in der ca. 200 Datensätze enthalten sind. Die Felder sind ganz gewöhnlich (Vorname, Nachname, Straße usw.).
Meine Aufgabe besteht nur darin, eine Suchmaske zu entwerfen, wo man eben nur den Vor- und Nachnamen eingibt, und in den Datensätzen gesucht wird. Wenn der Name enthalten ist, sollen alle Einträge dargeszellt werden.

Meine Fragen:
1. Kann ich diese Abfragen auch direkt in Excel machen (..oder muss ich die Excel Liste in eine Datenbank umwandeln) ?
2. Wenn ich ich es mit Datenbanken machen muss, was ist da der "leichteste" Weg ?


Bin für jeden Tipp dankbar. Hänge im Moment etwas in der Luft, komme einfsach nicht weiter !!


Gruß
kloti
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: Di 28.01.03 18:39 
Wenn du es in einer Datenbank machst, dann kannst du eine SQL Abfrage einbauen. Ist die einfachste Art.
smiegel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: Di 28.01.03 18:46 
Hallo Kloti,

zu 1.)
Ja! Gib einmal in der Excel-Hilfe "Datenbank" oder "DBfunktion" als Kriterium ein.

zu 2.)
Einen leichten Weg gibt es nicht ;-)
Das hängt von
- Deinem Kenntnisstand bzgl. Datenbanken
- Betriebssystem
- Delphi-Version
- ...
ab.

_________________
Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
matze
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 4613
Erhaltene Danke: 24

XP home, prof
Delphi 2009 Prof,
BeitragVerfasst: Di 28.01.03 18:51 
am besten du exportierst die EXCEL Tabelle in eine Textdatei. mit der lässt sich um eineiges einfacher hantieren als mit der excel tabelle

_________________
In the beginning was the word.
And the word was content-type: text/plain.
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Di 28.01.03 19:07 
Ja, das geht am einfachsten. Aber doch nicht von alleine. :mrgreen: Die gebräuchliste Methode ist, hinter jedes Datenfel einen ; zu setzen. In Excel (bei Datenimport) mußt Du dann festlegen : Keine feste Feldlänge, sondern Trennzeichen ; Lemmy hat hierzu ein gutes Tutorial geschrieben: "Word- und Excel - Automation", lies Dir das mal durch.

Gruß
Hansa
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Di 28.01.03 19:29 
Hallo,

Leute irre ich mich oder kann man Exel-Dateien per ADO direckt ansprechen?
Dann müsste es doch auch möglich sein direckt auf der Tabelle ein Query zu fahren. Eine aufwändige Konvertierung währe dann nnicht nötig.

Gruß
Klabautermann
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Di 28.01.03 19:56 
Und ohne ADO ? Einfach jedes Feld in eine Zeile schreiben und später auslesen, basta. 8)

Gruß
Hansa
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: Di 28.01.03 23:56 
Man kann Excel als Datenbak ansprechen, aber es is eine undankbahre Sache. Man investiert da mehr Zeit als in eine normale Datenbank. Deshalb kann man auch gleich es richtig machen.
lkz633
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 136

WinXP, Suse Linux 8.2 (unter VMWare)
D7 Prof, K3 Prof
BeitragVerfasst: Mi 29.01.03 12:12 
Popov hat folgendes geschrieben:
Man kann Excel als Datenbak ansprechen, aber es is eine undankbahre Sache. .


Klabautermann hat folgendes geschrieben:
Leute irre ich mich oder kann man Exel-Dateien per ADO direckt ansprechen?
Dann müsste es doch auch möglich sein direckt auf der Tabelle ein Query zu fahren;


Wiso undankbar ? Man kann Excel direkt mit ado ansprechen.

1) adokomponenten auf form setzten
2) einfach connectionstring mit dem jetProvider aufbauen (siehe www.connectionstring.com)
3) eine einfache Sql Abfrage mit Name und Vorname
4) Das Ergebiss ausgeben
5) fertig

Zitat:
Wenn der Name enthalten ist, sollen alle Einträge dargeszellt werden


Gibt es bei einem gefunden Namen mehrere Einträge ? Dann sollte die Struktur der Datenbank überdacht werden!!

Hoffe, dir weitergeholfen zu haben

Gruss lkz633
kloti Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Do 30.01.03 18:24 
Titel: Danke und Folgefrage
hi @all,

vielen, vielen Dank für eure zahlreichen und kompetenten Antworten.

Ich habe mich dazu entschlossen, die Excel-Liste in eine Datenbank zu exportieren, und so auf die Daten zu zugreifen.

Aber da liegt auch schon das Problem !!

Ich habe unter dem Registerreiter "BDE" eine Table angelegt, und sie mit meiner Datenbank verknüpft.

Über die Methode "FieldByName", kann ich in einer Spalte z.B. den Nachnamen finden !! Da aber in meiner Liste oft zweimal der gleiche Familienname vorkommt (Vater+Sohn), kann ich es nicht direkt zuordnen. Die Suchfunktion dieser Methode geht ja eben nur spaltenweise. Die weiteren Informationen, wie z.B. Straßennamen, Telefonnummer usw. sind ja in einer Zeile untergebracht. Ich komme ja somit gar nicht an diese Daten ran, da ich mit "Next" immer nur in einer Spalte weitergehe.

Könnt ihr mir da weiterhelfen ??

(Ich habe bereits versucht, mit einem Query zu arbeiten, kriege das aber nicht mit meiner Datenbank verknüft)

Bin wie immer für jeden Tipp dankbar !!!
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Do 30.01.03 18:35 
Zitat:
da ich mit "Next" immer nur in einer Spalte weitergehe.
Das stimmt schon, aber die Spalte gibt nur die Reihenfolge vor, in der Deine Datenmenge abgearbeitet wird. An die einzelnen Felder kommst Du schon dran, eben mit FieldByName. Vielleicht hast Du das value übersehen, das gibts auch.

Gruß
Hansa
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Do 30.01.03 18:36 
Titel: Re: Danke und Folgefrage
Hallo,
kloti hat folgendes geschrieben:
Da aber in meiner Liste oft zweimal der gleiche Familienname vorkommt (Vater+Sohn), kann ich es nicht direkt zuordnen. Die Suchfunktion dieser Methode geht ja eben nur spaltenweise. Die weiteren Informationen, wie z.B. Straßennamen, Telefonnummer usw. sind ja in einer Zeile untergebracht. Ich komme ja somit gar nicht an diese Daten ran, da ich mit "Next" immer nur in einer Spalte weitergehe.

Verstehe ich das richtig, die Tabelle sieht so aus:
ausblenden Quelltext
1:
2:
Max | Mustermann | Der Weg 12 | 12345 | Die Stadt <zeilenumbruch>
01234/23456 | 01234/9375765


Wenn ja ist dieses Design absolut Programmiererunfreundlich. Dann bleibt dir eigentlich nur noch die möglichkeit die Tabelle von oben bis unten durchzugehen und wenn der Eintrag der Suchmaske entspricht (also Spalte 1 & Spalte 2 übereinstimmen) alle Daten dieser und der nächsten Zeile ausgeben.

Gruß
Klabautermann
kloti Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Do 30.01.03 18:49 
@ Klabautermann

Die Struktur meine Tabelle ist genau so, wie in deinem Beispiel.
Wenn ich, um bei deinem Beispiel zu bleiben, den Nachnamen Mustermann in der Spalte "Nachname" finde, dann wäre ja der nächste Schritt, in der Spalte "Vorname" Max zu suchen. Es könnte ja aber sein, dass ein anderer Max vorher in der Liste steht. So dass ich diese Variante ja gar nicht wählen kann.

@ hansa,

an value hatte ich auch gedacht, aber um den Wert auszulesen bin ich wieder in dieser "Spaltenstruktur" (Table1vorname.value).
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Do 30.01.03 19:42 
Hallo,

1. Wenn du irgentwie Einfluss auf die Leute hast di diese Tabelle erstellen, versuche sie dazu zu Bringen ihre Daten in einer Zeile Pro Datensatz zu schreiben. Ich gehe aber davon aus, das sie nicht sehr begeistert sind alle bestehenden daten zu ändern.

2. Also dann musst du wie gesagt von Anfang bis zum ende der Tabelle durchlaufen.
ausblenden 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:
Prodedure FindData(vorname, Nachname : String);
  VAR
    Vorname, Nachname, Stasse, PLZ, Ort, Tel, Fax : STRING;
    Found : Boolean;
begin
  Table1.Filrst;
  Found := FALSE;
  WHILE NOT Table1.EOF DO BEGIN
     IF Found THEN BEGIN // Wenn im vorherigem durchgang etwas gefunden wurde
      Tel := Table1.FieldByName('Vorname').AsString;
      Fax := Table1.FieldByName('Nachname').AsString;
      ShowResult(Vorname, Nachname, Stasse, PLZ, Ort, Tel, Fax); // die musst du schreiben
      Found := FALSE;
    END; // Wenn im vorherigem durchgang etwas gefunden wurde
    IF (Table1.FieldByName('Vorname').AsString = vorname) OR (Table1.FieldByName('Nachname').AsString = nachname) THEN BEGIN
      Vorname := Table1.FieldByName('Vorname').AsString;
      Nachname := Table1.FieldByName('Nachname').AsString;
      Stasse := Table1.FieldByName('Strasse').AsString;
      PLZ := Table1.FieldByName('PLZ').AsString;
      Ort := Table1.FieldByName('Ort').AsString;
      Found := TURE;
    END;
  END; // Komplette Tabelle durchlaufen
end;

Nach diesem Schema sollte das Problem zu lösen sein.

Gruß
Klabautermann

PS: Der Code ist im Browser getippt und deshalb warscheinlich auch fehlerhaft. Es geht ums Konzept ;).
kloti Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Do 30.01.03 23:04 
Titel: DANKE Klabautermann !!!!!
Hi Klabautermann,

ein fettes Dankeschön für deine Hilfe !!
Durch deinen Code, an dem noch ein bißchen arbeiten mußte, habe ich es endlich hinbekommen. DANKE DANKE DANKE :) :) :)



Gruß
kloti
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Fr 31.01.03 10:38 
Titel: Re: DANKE Klabautermann !!!!!
Hallo,
kloti hat folgendes geschrieben:
Durch deinen Code, an dem noch ein bißchen arbeiten mußte, habe ich es endlich hinbekommen. DANKE DANKE DANKE :) :) :)

das freud mich, und gern geschehen.

Gruß
Klabautermann