Datenbanken
Wie spreche ich in einem DBGrid markierte Datensätze an?
Ich habe ein TDBGrid mit dgMultiSelect Enabled. Wie frage ich jetzt ab, welche Records der User gewählt hat?
Idee:
for i := 0 to YourGrid.SelectedRows.Count-1 do begin
if BookmarkValid (TBookmark(YourGrid.SelectedRows.Items[i])) then
begin
GotoBookmark (TBookmark(YourGrid.SelectedRows.Items[i]));
{Tu_Was_Mit_Daten;}
end;
end;
|
Eine einzelne Zelle in einem DBGrid selektieren
Um eine Zeile in einem DBGrid zu selektieren, muß man der Eigenschaft "SelectedField" den Klassennamen des gewünschten Feldes zuweisen:
DBGrid1.SelectedField := Table1SomeField; DBGrid1.SetFocus; |
Gelöschte Datensätze aus einer Datenbank entfernen
Das funktioniert mit folgender Routine aus der RxLib:
uses BDE;
procedure PackTable(Table: TTable);
var
FCurProp: CurProps;
TblDesc: CRTblDesc;
hDb: hDbiDB;
TablePath: array[0..dbiMaxPathLen] of Char;
Exclusive: Boolean;
begin
if not Table.Active then
_DBError(SDataSetClosed);
Check(DbiGetCursorProps(Table.Handle, FCurProp));
if StrComp(FCurProp.szTableType, szParadox) = 0 then begin
hDb := nil;
FillChar(TblDesc, SizeOf(CRTblDesc), 0);
with TblDesc do begin
StrPCopy(szTblName, Table.TableName);
StrCopy(szTblType, FCurProp.szTableType);
bPack := True;
end;
Check(DbiGetDirectory(Table.DBHandle, False, TablePath));
Table.Close;
try
Check(DbiOpenDatabase(nil, szCFGDBSTANDARD, dbiReadWrite,
dbiOpenExcl, nil, 0, nil, nil, hDb));
Check(DbiSetDirectory(hDb, TablePath));
Check(DbiDoRestructure(hDb, 1, @TblDesc, nil, nil, nil, False));
Check(DbiCloseDatabase(hDb));
finally
Table.Open;
end;
end
else
if StrComp(FCurProp.szTableType, szDBase) = 0 then begin
Exclusive := Table.Exclusive;
Table.Close;
try
Table.Exclusive := True;
Table.Open;
try
Check(DbiPackTable(Table.DBHandle, Table.Handle, nil,
nil,True));
finally
Table.Close;
end;
finally
Table.Exclusive := Exclusive;
Table.Open;
end;
end
else
DbiError(DBIERR_WRONGDRVTYPE);
end;
|
Wie kann man die Paßwort-Abfrage beim Öffnen einer Datenbank unterdrücken?
Die "Active"-Eigenschaft der TTable-Komponente muß im Objektinspektor auf "false" gesetzt werden, dann fügt man in der OnCreate-Methode des Hauptformulars folgenden Code ein:
Session.AddPassword('My secret password');
Table1.Active := true;
|
Wie kann man eine Paradox-Datenbank mit einem Paßwort schützen?
Diese Routine ändert das Masterpaßwort bzw. legt es an oder löscht es.
AFlag bestimmt, ob es ein Paßwort geben soll oder nicht. Die Table muß dabei exclusiv geöffnet sein.
procedure ChangeMasterPassword(Tbl: TTable; const APassword:String;
AFlag:Boolean);
var
hDb: hDbiDb;
TblDesc: CRTblDesc;
szDir : array[0..dbiMaxNameLen] of Char;
begin
Check(DbiGetDirectory(Tbl.DBHandle, False, szDir));
try
FillChar(TblDesc, sizeof(CRTblDesc), #0);
Tbl.DisableControls;
Tbl.Close;
Check(DbiOpenDatabase(nil, nil, dbiReadWrite, dbiOpenExcl, nil,
0, nil, nil, hDb));
Check(DbiSetDirectory(hDb,szDir));
TblDesc.bProtected:=AFlag;
if AFlag then StrPCopy(TblDesc.szPassword,APassword);
StrPCopy(TblDesc.szTblName, Tbl.TableName);
StrCopy(TblDesc.szTblType, szParadox);
Check(DbiDoRestructure(hDb, 1, @TblDesc, nil, nil, nil, False));
finally
Check(DbiCloseDatabase(hDb));
Tbl.EnableControls;
Tbl.Open;
end;
end; {Peter Haas}
|