Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   dBase mit BDE (https://www.delphipraxis.net/145701-dbase-mit-bde.html)

HannsW 6. Jan 2010 16:38

Datenbank: dbase • Version: III • Zugriff über: BDE/ODBC

dBase mit BDE
 
Hallo Forum,
wie kann ich ( Delphi5, BDE ) feststellen, ob ein Datensatz als gelöscht markiert ist?

Ich habe hier im Forum einen Hinweis auf TDBF gefunden, welches ein boolean isDeleted() liefert, ich fürchte aber, daß die Umstellung der fast fertigen Anwednung zu zeitaufendig wäre.

Bisher habe ich FieldByName() mit unterschiedlichen Parametern versucht:: kein Erfolg!

Danke für jeden Hinweis

Hanns

hoika 6. Jan 2010 18:11

Re: dBase mit BDE
 
Hallo,

TDBF ist doch im Quellcode.
OKOK ;)

Trotzdem ist es ein ziemlicher Aufwand.
Folgendes sollte dir weiterhelfen.

1

Suche dort nach
Showing deleted record in a DBF file
und gleich darunter
Recalling deleted records in DBF files


Heiko

HannsW 7. Jan 2010 01:25

Re: dBase mit BDE
 
Zitat:

Zitat von hoika
Showing deleted record in a DBF file

Heiko

Moin Heiko,
danke für den Tipp, den ich gleich versuchte. allerdings erhalte ich beim debuggen der proc
in dieser Zeile
Delphi-Quellcode:
   Check(DbiSetProp(hDBIObj(Table.Handle), curSOFTDELETEON, LongInt(ShowDeleted)));
die Meldung, daß
Zitat:

Merkmal nicht vorhanden
.
Hast Du auch dafür ne Lösung?
Hanns

hoika 7. Jan 2010 06:35

Re: dBase mit BDE
 
Hallo,

laut dieser Seite sollte es aber gehen.
1

Hier noch eine BDEUtils Unit
2

Daraus habe ich die hier (interessant ist DbiValidateProp):

Delphi-Quellcode:
procedure DataSetShowDeleted(DataSet: TBDEDataSet; Show: Boolean);
begin
  with DataSet do begin
    CheckBrowseMode;
    Check(DbiValidateProp(hDBIObj(Handle), curSOFTDELETEON, True));
    DisableControls;
    try
      Check(DbiSetProp(hDBIObj(Handle), curSOFTDELETEON, Ord(Show)));
    finally
      EnableControls;
    end;
    if DataSet is TTable then TTable(DataSet).Refresh
    else begin
      CursorPosChanged;
      First;
    end;
  end;
end;

Und ein betagter Artikel von Andreas Kosch persönlich
3


Und zum Schluss Quellcode zum Auslesen IsDeleted
5

Suche nach curSOFTDELETEON


2 Gründe fallen mir noch ein.

1. Tabelle muss geöffnet sein (sonst gibt es ja kein Handle)
2. falsche DBase-Version (das Softdelete gab es erst ab der 4er *geraten* )
ja, ich weiss, dass du die 5er angezeigt hast


Ansonsten google "curSOFTDELETEON"


Heiko

HannsW 7. Jan 2010 19:37

Re: dBase mit BDE
 
Zitat:

Zitat von hoika
Hallo,


Und ein betagter Artikel von Andreas Kosch persönlich

Heiko

Ne ´kleine Korrektur. bezgl Dbase: Ich habe dBase IV als db.

Mit A.Koschs Informationen bin ich am weitesten gekommen
Jedoch bekam ich für alle Datensätze je nach Radiobutton entweder ein Deleted, oder nicht.

Ich habe mir daraufhin nochmals meine ODBC-Verwaltung angesehen, und festgestellt. man kann dort
einen SChalter "gelöschte DS anzeigen" zurücknehmen.

Das habe ich getan, und mein derzeitges Problem ist gelöst.
Nicht aber der Wissensdurst, warum die anderen Versuch nicht klappten.
Doch das muss erst einmal zurückstehen.

Danke für Dein umfangreiche Hilfestellung.

MfG aus Nörten
Hanns

hoika 8. Jan 2010 06:32

Re: dBase mit BDE
 
Hallo,

kein Problem, hatte früher mit DBase/Paradox arbeiten müssen.

Um in die Zukunft zu schauen, solltest du von solchen
DB-spezifischen Sachen eh die Finger lassen.

Keine "normale" DB erlaubt es, einmal Deletes wieder zurückzunehmen,
wenn ein Commit (Transaktion abschließen) gemacht wurde.

Und damit nicht gleich wieder Einsprüche kommen ... ;)

Ja, das hat mit DBase nix zu tun.


Heiko

Reinhard Kern 8. Jan 2010 10:02

Re: dBase mit BDE
 
Zitat:

Zitat von hoika
Keine "normale" DB erlaubt es, einmal Deletes wieder zurückzunehmen,
wenn ein Commit (Transaktion abschließen) gemacht wurde.

Hallo,

das muss man aber nicht unbedingt als positive Eigenschaft sehen - stell dir vor, was die User sagen würden, wenn unter Windows der Papierkorb gestrichen würde.

Gruss Reinhard

hoika 8. Jan 2010 10:44

Re: dBase mit BDE
 
Hallo,

ich meinte das anders.
Benutzt die App die DBase-SoftDeletes ganz gezielt aus,
wird ein Umstieg auf eine "richtige" Datenbank (jaja, musste sein ;) )
sehr schwierig.

SoftDeletes wurden wohl damals eingeführt,
weil im Mehrbenutzerbetrieb das "richtige Löschen"
zu schwierig zu Implementieren war.


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:53 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