AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Hilfe bei "Datenbank"(Datei)

Ein Thema von Pseudemys Nelsoni · begonnen am 27. Sep 2004 · letzter Beitrag vom 27. Sep 2004
Antwort Antwort
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

Hilfe bei "Datenbank"(Datei)

  Alt 27. Sep 2004, 14:19
moin,

ich hab mir eine klasse geschrieben in der ich eine datei als datenbank benutze, also accounts aus einer datei löschen/hinzufügen.
in meinem hauptprogramm habe ich 4 buttons.... "Hinzufügen", "Löschen", "Existiert?", "Infos"...

ersterer ist um einen account hinzuzufügen (bezieht sich auf alle 3 edits meine hauptprogramms),
zweiterer löscht einen account aus der datenbank(bezieht auf edit1),
dritterer prüft ob ein account(nickname btw) existiert (bezieht sich auf edit1),
letzterer zeigt infos über den account an die man vorher bei edit2 und edit3 des entsprechenden accounts hinzugefügt hatte....

es funktionier auch alles einwandfrei, nur gibt es ein problem... wenn man einen account löscht ("Löschen")(wird so gemacht in dem man alle accounts in eine neue (temporäre)datei einfügt und den entsprechenden nick nicht mitkopiert, dann löscht man das original und benennt die temporäre in das originale um) und dann schnell auf "existiert?" klickt, zeigt es noch "ja" an und das ersetzen der dateien klappt nicht weil durch de messagebox die datei noch verwendet wird. das löschen geht zu langsam so das es ca 1sek dauert bis dateien gelöscht und umbenannt sind....und natürlich sollte es nich möglich sein wenn man einen anderen button drückt das dannalles nimmer geht...
Ist bisschen schwer zu erklären was ich meine, ich hänge es mal an...

zum testen einfach mal einen account hinzufügen, dann löschen und unmittelbar danach auf "existiert" klicken dann seht ihr das in "C:\" beide dateien existieren "hi.db" und "hi.db.tmp"

hat jemand ne idee wie ich das beheben kann?
Angehängte Dateien
Dateityp: zip project1_112.zip (229,4 KB, 5x aufgerufen)
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
KrasserChecker

Registriert seit: 21. Jul 2004
120 Beiträge
 
#2

Re: Hilfe bei "Datenbank"(Datei)

  Alt 27. Sep 2004, 14:36
Wie wäre es, wenn Du beim Löschen eines Accounts mit Streams arbeitest?

1) Die gesamte Datei in ein TMemoryStream laden.
2) Einen Datensatz nach dem anderen in einen zweiten TMemoryStream kopieren (dabei natürlich den zu löschenden Datensatz auslassen)
3) Den zweiten TMemoryStream unter dem ursprünglichen Dateinamen wieder auf der Platte speichern.

Wenn wir schon dabei sind:
Ich würde eigentlich immer mit Streams arbeiten (wenn möglich). So kannst Du zum Anhängen eines neuen Datensatzes auch ganz hervorragend TFileStream nutzen (Ganeu, wie zum Ändern eines bereits bestehenden).

Ansonsten solltest du vorsichtiger mit AssignFile & CloseFile sein und IMMER mit try...finally arbeiten.
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#3

Re: Hilfe bei "Datenbank"(Datei)

  Alt 27. Sep 2004, 14:46
moin,

mit streams hab ich bisher noch nie gearbeitet, deswegen "trau" ich mich nicht das zu versuchen *g*

@try finally: stimmt ich hatte eins vergessen (das war auch der fehler). try..finally/except sind ja eigentlich dazu da bei exceptions zu reagieren. sollte man "try..finally" für soetwas überhaupt "missbrauchen" wie bei einem vorzeitigem exit?

danke für deine antwort.
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
KrasserChecker

Registriert seit: 21. Jul 2004
120 Beiträge
 
#4

Re: Hilfe bei "Datenbank"(Datei)

  Alt 27. Sep 2004, 15:12
Zitat:
try..finally/except sind ja eigentlich dazu da bei exceptions zu reagieren
Nicht ganz.
Der try...finally-Block ist dazu da, um sicherstellen zu können, dass bestimmte Anweisungen IMMER durchgeführt werden (und zwar auch im Fehlerfall). Hier kann aber nicht explizit auf einen Fehler reagiert werden.
Der try...except-Block dageben ist in der Tat dafür da, explizit auf Fehler reagieren zu können.

Zitat:
sollte man "try..finally" für soetwas überhaupt "missbrauchen" wie bei einem vorzeitigem exit
Auf jeden Fall, das ist kein "Missbrauch".
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:46 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