Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Direkter Zugriff auf Datensatz

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
kilix



Anmeldungsdatum: 05.02.2022
Beiträge: 175

BeitragVerfasst am: 12.02.2022, 16:18    Titel: Direkter Zugriff auf Datensatz Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 12.02.2022, 17:51    Titel: Antworten mit Zitat

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". zwinkern

Viele Grüße!
Sebastian
_________________

Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
HorstD



Anmeldungsdatum: 01.11.2007
Beiträge: 107

BeitragVerfasst am: 12.02.2022, 17:57    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
kilix



Anmeldungsdatum: 05.02.2022
Beiträge: 175

BeitragVerfasst am: 12.02.2022, 18:14    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz