|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
kilix
Anmeldungsdatum: 05.02.2022 Beiträge: 175
|
Verfasst am: 12.02.2022, 17:18 Titel: Direkter Zugriff auf Datensatz |
|
|
Hallo,
ich schon wieder mit einer neuen Frage:
ich habe 2 Dateien, DateiA und DateiB. Aus DateiA lese ich einen Schlüssel ein mit dem ich auf einen Satz in DateiB direkt zugreifen will.
Z.B. DateiA sind Kundenbestellungen, DateiB ist die Kundendatei. Aus den Kundenbestellungen berechne ich den Umsatz eines Kunden und möchte diesen Betrag in den Datensatz dieses Kunden in DateiB speichern.
1) gibt es in FreeBasic die Möglichkeit auf den Datensatz direkt mit den Schlüssel zuzugreifen, z.B. mit der Kundennummer?
Ich nehme an, dass man dazu eine Schlüsseldate braucht deren Sätze aus Kundennummer und Satznummer besteht. Dazu braucht man sicher eine FreeBasic-Funktion mit dem Zugriffsalgorithmus. So eine Funktionsbeispiel habe ich bisher nicht gefunden.
2)wenn ich die Nummer eines Datensatzes kenne: wie greife ich auf diesen Datensatz zu und wie kann ich ihn wieder zurückspeichern (gändert)?
Danke für eure Hilfe!!! _________________ Grüße
kilix |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 12.02.2022, 18:51 Titel: |
|
|
Hallo,
du könntest natürlich auf eine SQL-Datenbank zurückgreifen und diese von FreeBASIC aus ansprechen.
Damit kannst du dann ganz leicht Auswertungen und Abfragen machen wie z. B.
Code: | SELECT * FROM Kunden WHERE Kundennummer='A123'; |
oder
Code: | UPDATE Kunden SET Kundengruppe = 'Wichtig' WHERE Kundennummer='A123'; |
Wenn du stattdessen direkt auf Dateien mit einem individuellen Format setzt, hast du 2 Optionen:
1) Sequenziell alle Datensätze durchgehen (entweder bei Textdateien zeilenbasiert oder bei Binär-/Random-Daten satzbasiert) und gucken, ob der jeweils aktuelle Satz der gesuchte ist
2) Neben der eigentliche Datendatei eine Index-Datei aufbauen und aktualisieren, wann immer du in der Datendatei Einträge hinzufügst, löscht oder Schlüssel änderst. Das ist aber recht kompliziert!
Das mit dem Index könnte so funktionieren:
Du baust einen Suchbaum auf (siehe Thema Pointer, verkettete Listen usw.), über den du zu einer mehrstelligen Kundennummer die Satznummer in der Datei speicherst und abfragen kannst. D.h. z. B. aus dem Baumpfad A->1->2->3 (Kd.nr. "A123") könnte man etwa ablesen "80". Was bei eine Satzlänge von 100 Bytes hieße, dass du diesen Kunden ab Offset 80*100 = 8000 lesen kannst. Dann musst du nicht die ganze Datendatei Satz für Satz durchsuchen, sondern kannst direkt zu Offset 8000 SEEKen.
Wenn deine Daten-Datei aber nicht im GB-Bereich ist und Performance bei deiner Anwendung nicht der Knackpunkt ist, könntest du darauf auch verzichten und einfach immer einen "Full Table Scan" machen, also die Dateien von vorne bis zu einer etwaigen Fundstelle durchsuchen. Bei heutigen Rechnern, SSDs usw. ist das auch nicht die Welt.
Einfacher wäre aber z. B. PostgreSQL zu benutzen. Das ist freie Software und bietet dir Indizes und sowas schon "ready to use".
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
|
HorstD
Anmeldungsdatum: 01.11.2007 Beiträge: 107
|
Verfasst am: 12.02.2022, 18:57 Titel: |
|
|
Zitat: | wenn ich die Nummer eines Datensatzes kenne: wie greife ich auf diesen Datensatz zu und wie kann ich ihn wieder zurückspeichern (gändert)? |
Einfach eine Random Datei erstellen, dann kannst du jeden Datensatz gezielt lesen und speichern.
Code: | Open Datei for Random as #1
Get #1, 99, ds ' Datensatz 99 lesen
...
Put #1, 99, NeuerDS ' Schreiben
Close |
|
|
Nach oben |
|
|
kilix
Anmeldungsdatum: 05.02.2022 Beiträge: 175
|
Verfasst am: 12.02.2022, 19:14 Titel: |
|
|
Danke für eure Antworten!
mit SQL komme ich leider nicht weiter, ich habe, wie hier schon mal erwähnt vor mehr als 30 Jahren etwas BasicPlus von DEC programmiert und fange jetzt hobbyweise wieder an Basic zu lernen, das sich seit damals sehr stark verändert hat. Außerdem habe ich natürlich vieles vergessen was damals für mich ganz selbstverständlich war.
Aber die Methode der Erstellung einer Schlüsseldatei, enthaltend den Schlüssel und den Datensatz erscheint mir eine einfache Lösung zu sein.
Dann kann ich den Schlüssel in der Schlüsseldate suchen (bei meiner Dateigröße dauert das sicher nicht zu lange), mit einlesen und mit PUT rausschreiben.
Danke das hat mir geholfen! _________________ Grüße
kilix |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|