Liste der FAQ Einträge "Datenbanken"
Indexverweis in dBase Tabelle löschen
Markiere die Tabelle als 'ohne Index' indem Du byte 28 auf 0 setzt.
procedure Tform1.RemoveMDXByte(dbfFile: String);
const
Value: Byte = 0;
var
F: File of byte;
begin
AssignFile(F, dbfFile);
Reset(F);
Seek(F, 28);
Write(F, Value);
CloseFile(F);
end;
Wie kann ich JPGs in meiner Tabelle ablegen und wieder auslesen
Schreibt ein JPEG-Bild aus einer Datei in ein Datenbankfeld:
procedure TfmModellEditor.LoadJPEG(Field:TField;FileName:string);
var JPEGImage:TJPEGImage;
Stream:TStream;
begin
JPEGImage:=TJPEGImage.Create;
try
JPEGImage.LoadFromFile(FileName);
Field.DataSet.Edit;
Stream:=Field.DataSet.CreateBlobStream(Field,bmWrite);
try
JPEGImage.SaveToStream(Stream);
finally
Stream.Free;
end;
finally
JPEGImage.Free;
end;
end;
Lesen geht umgekehrt. Der Blobstream wird mit bmRead erzeugt, das
JPEGImage mit LoadFromStream geladen und mit SaveToFile in eine Datei
geschrieben.
Statt der Dateien kann Du auch eine TGraphic als Quelle/Ziel benutzen
und das Bild zum Beispiel mit Image1.Picture.Assign(JPEGImage)
anzeigen.
Zugriffsfehler: "... wird von einem anderen Benutzer bearbeitet ..."
Post aktualisiert nur den Cache. Also
applyupdates
commitupdate
Lists Tables from Access DataBase
SELECT MSysObjects.Name
FROM MSysObjects
WHERE (((Left([MSysObjects].[name],4))<>"MSys")
AND ((MSysObjects.Type)=1))
ORDER BY MSysObjects.Name;
Access Datenbank zur Laufzeit erstellen:
1. Über ODBC:
=============
function SQLConfigDataSource(
hwndParent: HWND;
fRequest: Word;
lpszDriver: string;
lpszAttributes: string): BOOLEAN; stdcall; external 'odbccp32.dll';
// SQLConfigDataSource() options
// ODBC_ADD_DSN = 1;
// ODBC_CONFIG_DSN = 2;
// ODBC_REMOVE_DSN = 3;
// ODBC_ADD_SYS_DSN = 4;
// ODBC_CONFIG_SYS_DSN = 5;
// ODBC_REMOVE_SYS_DSN = 6;
if SQLConfigDataSource(
0,
ODBC_ADD_DSN,
'Microsoft Access Driver (*.mdb)',
'CREATE_DB=c:\ATest.mdb General' )
then ..ok.. else ..any_error..
2. Über die KaDAO Tools aus der DSP:
====================================
var s: string;
ListBox1: TListBox;
s := 'c:\palmdb.mdb';
KADaoDatabase1.Database := s;
if not FileExists( s ) then KADaoDatabase1.CreateAccessDatabase( s );
KADaoDatabase1.Connected := TRUE;
ListBox1.items.Assign( KADaoDatabase1.TableNames );
KADaoDatabase1.Connected := FALSE;
ADOConnection in DLL bringt Fehler
- Die Unit ActiveX aufnehmen in die USES-Klausel.
- Bevor irgendwie auf das ADO-Object zugegriffen wird, CoInitializeEx(0,NIL) aufrufen
- Am Ende der Operationen mit dem ADO-Object CoUnitinialize aufrufen.
Vielleicht reicht es nicht die COM-Schnittstelle zu initialisieren, weil
du die OLE-Schnittstelle benutzt. In diesem Falle hilft ein
OleInitialize(Nil), zum Beenden dann OleUninitialize.
MS SQL7 Fehler DB 'tempdb' kann nicht geöffnet werden - SUSPECT
SQL Server 7.0 SP1 dt. auf NT4SP6 startet mit Fehlermeldung:
Datenbank 'tempdb' kann nicht geöffnet werden. Sie wurde bei der Wiederherstellung als SUSPECT markiert.
- umbennen des tempdb Files tempdb.mdf in tempdb.ldf
- Starten des Serves mit SQLSERVR -c -f -T3608 -T4022
- Öffnen einer ISQL Verbindung
- Reset Status: update master..sysdatabases set status = 4 where name = 'tempdb'
- Stoppen des SQL Servers (CTRL+C)
- anschließnedes Starten recovert und legt tempdb wieder neu an
- Tip: Option Protokoll am Prüfpunkt abschneiden aktivieren
Rechnen mit NULL Werten
Möchte man in SQL Anweisungen rechnen und eine Zeile enthält NULL statt einer Zahl (0,1,2..) ist das Ergebnis immer NULL.
Spezielle Funktion interpretieren die NULL wie eine numerische Null (0).
MS SQL7: COALESCE(), Bsp.: SELECT COALESCE(SUM(DB), 0) FROM ctr_positionen
Oracle8: nvl()
MS Access: Nz()
Darstellung der aktuellen Kalenderwoche in SQL (MS-SQL7)
Die Funktion datepart(wk,getDate()) des MS SQL Servers zeigt die Kalenderwoche nicht nach der DIN 1355 an.
Für Delphi gibt es u.a. in Simons Fundgrube eine Berechnungsvorschrift dafür. Damit können Planungstabellen
mit KW Angaben korrekt gefüllt werden. Für eine Liste fehlt nur noch der Vergleich mit der aktuellen Kalenderwoche.
Diese liefert der Einzeiler. Er kann als Sicht abgelegt werden und in beliebigen Abfragen und Sichten verwendet werden.
Wird getDate() durch einen Parameter ersetzt, eigent sich der Code auch für eine gespeicherte Prozedur zur Ermittlung der Werte.
CREATE VIEW get_aktKWJahr AS
-- case Statements zur Anpassung der Wochentage von Mo-So (MS SQL) nach Sa-So (Delphi)
select
akt_KWJahr = datepart(yy,(getdate()+(((8-case(datepart(dw,getdate())+1) when 8 then 1 else datepart(dw,getdate())+1 end)%7)-3))),
akt_KWWoche = ((datediff(dy,convert(datetime,'01.01.'+convert(char(4),datepart(yy,(getdate()+(((8-case(datepart(dw,getdate())+1) when 8 then 1 else datepart(dw,getdate())+1 end)%7)-3))))),getdate())-3+((case(datepart(dw,convert(datetime,'01.01.'+convert(char(4),datepart(yy,(getdate()+(((8-case(datepart(dw,getdate())+1)when 8 then 1 else datepart(dw,getdate())+1 end)%7)-3))))))+1) when 8 then 1 else datepart(dw,convert(datetime,'01.01.'+convert(char(4),datepart(yy,(getdate()+(((8-case(datepart(dw,getdate())+1) when 8 then 1 else datepart(dw,getdate())+1 end)%7)-3))))))+1 end+1)%7))/7)+1
Anzeige der Benutzer und deren Rollen (MS-SQL7)
Es wird eine Liste erzeugt, die alle Nutzer und deren Rollen in der aktuelle Datenbank listet.
Wurde die Datenbank von MSSQL6.5 übernommen, so können versteckte Rollen über den Alias vorhanden sein.
Auch diese werden in der Sicht berücksichtigt.
Als Sicht programmiert und über Username mit user_name() verknüpft kann man die Rolle(n) des aktiven Accounts ermitteln.
SELECT g.name as Role, l.loginname as UserName, 'neu' as Status
FROM sysmembers m, sysusers s, sysusers g, master.dbo.syslogins l
WHERE s.uid = m.memberuid
and g.uid = m.groupuid
and m.memberuid > 1
and s.suid = l.suid
UNION
SELECT x.name as Role, l.loginname as UserName, 'alt' as Status
FROM sysusers x, sysusers s, master.dbo.syslogins l
WHERE x.uid = s.altuid
and x.uid > 1
and s.suid = l.suid
UNION
SELECT s.name AS Role, l.loginname AS UserName, 'Alias' AS Status
FROM sysusers s, master.dbo.syslogins l
WHERE s.suid = l.suid
and s.status = 2
and rtrim(ltrim(lower(s.name))) <> rtrim(ltrim(lower(l.loginname)))
ORDER BY Role, UserName