| Autor |
Beitrag |
Black_Fox
      
Beiträge: 66
|
Verfasst: Di 01.04.08 21:01
Hi hab nichts wirklich dazu hier gefunden und wollte erstmal fragen ob dies überhaupt möglich ist Die Daten die sich in einer Datenbank befinden über enen Buton sortiert in einer Textatei abzuspeichern?
Ich bin dabei ein kleines Adressbuch als Schulprojekt zu programmieren und würde gerne die Daten geordnet in einer Textdatei abspeichern.
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 01.04.08 21:36
ja das ist möglich, wenn du beim buttonclick noch 'n paar zeilen code hinterlegst...  <woher soll denn sonst delphi wissen, aus welcher datenbank, welcher tabelle, wie sortiert, welche felder, wohin...>
|
|
Black_Fox 
      
Beiträge: 66
|
Verfasst: Mi 02.04.08 09:17
Ah ok also ist es erstmal möglich das wollte ich bloß erstmal wissen dann werde ich mal probieren dass hinzubekommen und wenn Probleme auftreten melde ich mich nochmal.
Hab festgestellt das ne .csv datei doch besser wäre aber das kann ich ja mit nem filter in meinem savedialog machen.
|
|
Black_Fox 
      
Beiträge: 66
|
Verfasst: Do 03.04.08 17:07
hab das jetzt so gemacht funktioniert aber nicht kannst du mir sagen was daran falsh ist?:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| var Adressdaten : textfile; begin if DBSave.Execute then begin assignfile(Adressdaten,DBSave.Filename+'.txt'); rewrite(Adressdaten); TAdressdaten.FieldByName('Nachname').AsString := DBEdit1.Text; TAdressdaten.FieldByName('Vorname').AsString := DBEdit2.Text; TAdressdaten.FieldValues['Geburtsdatum'] := DBEdit3.Text; TAdressdaten.FieldByName('E-mail').AsString := DBEdit4.Text; TAdressdaten.FieldByName('Telefonnummer').AsString := DBEdit5.Text; TAdressdaten.FieldByName('Handy Nummer').AsString := DBEdit6.Text; TAdressdaten.FieldByName('Straße').AsString := DBEdit7.Text; TAdressdaten.FieldByName('Hausnummer').AsString := DBEdit8.Text; TAdressdaten.FieldByName('PLZ').AsString := DBEdit9.Text; TAdressdaten.FieldByName('Wohnort').AsString := DBEdit10.Text; closefile(Adressdaten); end; |
|
|
Black_Fox 
      
Beiträge: 66
|
Verfasst: Mo 07.04.08 10:55
Kann mir bitte jemand helfen? Ich will die Daten aus ner Datenbank in ner Textdatei speichern aber hab kein wirklichen Plan davon?
|
|
zuma
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: Mo 07.04.08 11:17
was ist TAdressdaten bei Dir ??
Wenn das deine Abfragekomponente ist, kanns auch nicht gehen, du überträgst die Daten der Anzeige in TAdressdaten ...
Ich denke, du solltest es evtl. so machen:
die Datenmenge durchlaufen, (First und dann z.b while not eof))
pro Datensatz einen String aufbereiten (Trennzeichen ';' verwenden, dann kannste auch CSV),
diesen in einer Stringlist speichern, (add('xy'))
nachdem du alle Datensätze durchlaufen hast, die Stringlist per savetofile speichern - fertig.
_________________ Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
|
|
Zorro
      
Beiträge: 76
Win 2000, Win XP Pro
Delphi 7 Architect
|
Verfasst: Mo 07.04.08 11:35
Black_Fox hat folgendes geschrieben: | hab das jetzt so gemacht funktioniert aber nicht kannst du mir sagen was daran falsh ist?:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| var Adressdaten : textfile; begin if DBSave.Execute then begin assignfile(Adressdaten,DBSave.Filename+'.txt'); rewrite(Adressdaten); TAdressdaten.FieldByName('Nachname').AsString := DBEdit1.Text; TAdressdaten.FieldByName('Vorname').AsString := DBEdit2.Text; TAdressdaten.FieldValues['Geburtsdatum'] := DBEdit3.Text; TAdressdaten.FieldByName('E-mail').AsString := DBEdit4.Text; TAdressdaten.FieldByName('Telefonnummer').AsString := DBEdit5.Text; TAdressdaten.FieldByName('Handy Nummer').AsString := DBEdit6.Text; TAdressdaten.FieldByName('Straße').AsString := DBEdit7.Text; TAdressdaten.FieldByName('Hausnummer').AsString := DBEdit8.Text; TAdressdaten.FieldByName('PLZ').AsString := DBEdit9.Text; TAdressdaten.FieldByName('Wohnort').AsString := DBEdit10.Text; closefile(Adressdaten); end; | |
Vergiss den ganzen Block, der mit "TAdressdaten.FieldByName..." beginnt und guck in der Hilfe zum Thema "write/writeln" nach. Hier werden Sie geholfen.
Greetz
Zorro
_________________ Real programmers confuse Xmas and Halloween because DEC 25 = OCT 31
|
|
Zorro
      
Beiträge: 76
Win 2000, Win XP Pro
Delphi 7 Architect
|
Verfasst: Mo 07.04.08 11:36
Black_Fox hat folgendes geschrieben: | hab das jetzt so gemacht funktioniert aber nicht kannst du mir sagen was daran falsh ist?:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| var Adressdaten : textfile; begin if DBSave.Execute then begin assignfile(Adressdaten,DBSave.Filename+'.txt'); rewrite(Adressdaten); TAdressdaten.FieldByName('Nachname').AsString := DBEdit1.Text; TAdressdaten.FieldByName('Vorname').AsString := DBEdit2.Text; TAdressdaten.FieldValues['Geburtsdatum'] := DBEdit3.Text; TAdressdaten.FieldByName('E-mail').AsString := DBEdit4.Text; TAdressdaten.FieldByName('Telefonnummer').AsString := DBEdit5.Text; TAdressdaten.FieldByName('Handy Nummer').AsString := DBEdit6.Text; TAdressdaten.FieldByName('Straße').AsString := DBEdit7.Text; TAdressdaten.FieldByName('Hausnummer').AsString := DBEdit8.Text; TAdressdaten.FieldByName('PLZ').AsString := DBEdit9.Text; TAdressdaten.FieldByName('Wohnort').AsString := DBEdit10.Text; closefile(Adressdaten); end; | |
Vergiss den ganzen Block, der mit "TAdressdaten.FieldByName..." beginnt und guck in der Hilfe zum Thema "write/writeln" nach. Hier werden Sie geholfen.
Greetz
Zorro
_________________ Real programmers confuse Xmas and Halloween because DEC 25 = OCT 31
|
|
Black_Fox 
      
Beiträge: 66
|
Verfasst: Mo 07.04.08 11:54
ok thx für den tipp werd ich mal machen, wollte mal fragen ob das mit einer stringlist besser wäre?
|
|
Zorro
      
Beiträge: 76
Win 2000, Win XP Pro
Delphi 7 Architect
|
Verfasst: Mo 07.04.08 17:49
Black_Fox hat folgendes geschrieben: | | ok thx für den tipp werd ich mal machen, wollte mal fragen ob das mit einer stringlist besser wäre? |
Ich sach mal "Ansichtssache" - StringListen haben das Plus, dass du gaaaaanz bequem laden und speichern kannst, weil es entsprechende Methoden gibt, auch das Sortieren is n Klacks, dafür musst du sie brav als Objekt behandeln (also createn und freigeben).
Der Zugriff per textfile ist reines Pascal ohne Objekt-Schnickschnack (grins), dafür musst du eben mehr "zuu Fuß" machen.
Greetz
Zorro
_________________ Real programmers confuse Xmas and Halloween because DEC 25 = OCT 31
|
|
Black_Fox 
      
Beiträge: 66
|
Verfasst: Mo 07.04.08 20:29
ah ok danke für die info also werd ich das mit ner stringlsit versuchen da ich die addressdaten ja auch mal importieren will und nicht nur exportieren
|
|
Black_Fox 
      
Beiträge: 66
|
Verfasst: Do 10.04.08 17:41
Das haut ni ganz hin, aber warum weiß ich nicht Login ist meine Paradox Tabelle also die Datenbank denke ich, aber wie kann ich jetzt die Daten darin auslesen bzw. abspeichern?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TForm1.Button3Click(Sender: TObject); var i : integer; f : textfile; dsatz: string; begin if savedialog1.Execute then begin assignfile(f,savedialog1.filename); rewrite(f); for i:= 0 to Adressliste.Count -1 do begin dsatz:=''; dsatz:= (inttostr(i+1)+', '+ TLogin(Adressliste.Objects[i]).DBEdit1+', '+ Tlogin(Adressliste.Objects[i]).DBEdit2+', '+ writeln(f,dsatz); end; closefile(f); end; end; |
|
|
SmileySN
      
Beiträge: 297
WinXP, Win7
Delphi 2010 Professional
|
Verfasst: Do 10.04.08 23:11
Bei einer Datenbank, holt man sich seine Daten nicht aus den DBEdit-Komponenten sondern direkt aus dem Datenbankfeld.
In CSV Dateien sollte man möglichst die Felder mit einem Semikolon trennen.
Falls man nicht ausschließlich Textfelder benutzt (in denen kein Semikolon vorkommt), sollte man die Feldeinträge in Anführungszeichen setzen.
Hier mal ein Beispiel wenn man ein Connection und ein Query Objekt benutzt.
Das Query-Objekt heißt hier QWork, der SQL string heißt: 'Select * From Tabellenname order by Name'
Durch den Feldnamen hinter 'order by' kann man sich aussuchen wonach sortiert wird.
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:
| procedure ExportCSV; var ProgPath, KopfZeile: string; DateiOut: Textfile; Kopf: Boolean;
begin Kopf := True; ProgPath := ExtractFilePath(ParamStr(0));
KopfZeile := 'Name; Vorname; Ort; PLZ; Strasse'; AssignFile(DateiOut, ProgPath + 'Export.csv'); try rewrite(DateiOut);
if Kopf then WriteLn(DateiOut, KopfZeile); QWork.First; while not QWork.eof do begin Write(DateiOut, QWork.FieldByName('Name').AsString + ';'); Write(DateiOut, QWork.FieldByName('Vorname').AsString + ';'); Write(DateiOut, QWork.FieldByName('Ort').AsString + ';'); Write(DateiOut, QWork.FieldByName('PLZ').AsString + ';'); WriteLn(DateiOut, QWork.FieldByName('Strasse').AsString );
QWork.Next; end; finally CloseFile(DateiOut); end; end; |
Wenn ich mir Deine Programmierversuche so ansehe, glaube ich jedoch, Du hast noch gar keine Adressdatenbank sondern wilst erst eine anlegen, das ist ein ganz anderes Problem.
Ich bin davon ausgegangen, dass Du schon eine Datenbank mit Adressdaten hast und diese sortiert in eine CSV Datei ausgeben willst.
|
|
Black_Fox 
      
Beiträge: 66
|
Verfasst: Fr 11.04.08 09:01
ne ich hab ne paradox datenbank über die datenbankoberlche angelegt und 3 test datensätze schon drin, also könnte ich das verwenden oder?
|
|
SmileySN
      
Beiträge: 297
WinXP, Win7
Delphi 2010 Professional
|
Verfasst: Fr 11.04.08 10:39
Wenn Du eine DB schon angelegt hast, dann geht das.
Falls Du auf deinem PC Access installiert hast, würde ich empfehlen damit eine DB anzulegen und mit den ADO Componenten darauf zuzugreifen.
aber zum ausprobieren spielt es erst mal keine Rolle was man einsetzt.
Setze ein connection Objekt, eine query, eine Datasource und ein DBGrid auf dein Formular.
In der Connection alles eintragen was nötig ist um die DB zu finden.
In der Query die Connection auswählen und den SQL-Text eingeben.
Die Datasource mit der Query verbinden.
Das DBGrid mit der Datasource verbinden.
Eventuell noch einen Navigator aufs Formular und mit der Datasource verbinden.
Damit kannst Du schon mal alles nötige machen und es tut sich was in Deinem Programm.
|
|
Black_Fox 
      
Beiträge: 66
|
Verfasst: Fr 11.04.08 11:40
was ist eine connection komponente? und für was ist die gut?
|
|
zuma
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: Fr 11.04.08 12:03
Connection-Komponente = Objekt, welches die Verbindung zur Datenbank herstellt.
Hier ist wohl die ADOConnection-Komponente gemeint, die auf dem Reiter ADO zu finden sein sollte. Dort kannst du dann die Daten angeben, die zur verbindung nötig sind (z.b die Database, den ConnectString, etc) und auf bestimmte Connect-Ereignisse (after-/before-connect, etc.) reagieren.
für was die gut ist, sollte sich damit erklären.
Ansonsten hat SmileySN schon gesagt, wie man damit mal testet.
_________________ Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
|
|
SmileySN
      
Beiträge: 297
WinXP, Win7
Delphi 2010 Professional
|
Verfasst: Fr 11.04.08 14:05
Genau so ist es.
Wenn Du schon eine Table Komponente auf Deinem Formular hast um die Datenbank anzusprechen, dann muss diese ja auch über irgendwas angebunden werden.
Oder ist das bei den einfachen BDE Foxpro Komponenten nicht so ? Hab damit schon seit vielen Jahren nicht mehr gearbeitet und bin gerade nicht im Delphi um nachzusehen.
Die Frage ist erst mal hast Du Access aus dem Microsoft Office Paket auf Deinem Computer installiert. Wenn ja, kann ich Dich Schritt für Schritt weiterführen.
Auf die alte BDE mit DBase und Foxpro habe ich keine Lust. Das ist schon zu veraltet. Table benutze ich auch nur sehr selten. Mit einer Query kann man alles viel einfacher machen und SQL muss man irgendwann sowieso lernen wenn man mit Datenbanken arbeiten will.
|
|
Ydobon
      
Beiträge: 42
|
Verfasst: Fr 11.04.08 15:20
Access ist doch eigentlich nicht unbedingt notwendig, die Jet Engine sollte doch ab 2000 bei Windows auch so dabei sein?
|
|
SmileySN
      
Beiträge: 297
WinXP, Win7
Delphi 2010 Professional
|
Verfasst: Fr 11.04.08 15:40
Es geht jier nur um das anlegen der Datenbank.
Darum benutzt er ja auch die Foxprodatenbank, weil dafür ein Datenbankerstellungstool bei den alten Delphiversionen dabei ist.
Für diesen Zweck nimmt man das Accessprogramm, danach braucht man es nur noch, wenn man Änderungen an der DB vornehmen will und sich noch nicht so gut mit den SQL-Befehlen fürs Ändern der Felder auskennt.
Ich kann auch gerne eine leere AccessDB zuschicken wenn ich weiß, welche Felder mit welchen Feld-Typen und -größen benötigt wird.
Man kann auch mit Firebird oder Advantage Database Server oder einfach MS-SQLExpress arbeiten, aber da ist einiges erst mal zu lernen bevor das läuft.
|
|