Als ASP-Enthusiast verwende ich häufig ADO-Objekte in ASP-Seiten, um ODBC-Datenbanken zu betreiben. Ich halte es für sehr praktisch, ASP zum Erstellen von WEB-Anwendungssystemen zu verwenden. Obwohl der Autor in meiner Programmierkarriere die Produkte der Borland-Serie bevorzugt und Microsoft-Produkten gegenüber etwas abstoßend ist, ist ASP die Ausnahme. Eines Tages hatte ich eine Idee. Das ADO-Objekt ist ein Standard-OLE-Objekt. Es wäre großartig, wenn ADO zum Betrieb der Datenbank in einer DELPHI-Anwendung verwendet werden könnte. Insbesondere wenn DELPHI als Netzwerkdatenbankanwendung verwendet wird und die WEB-Site eine WINNT-Site ist und ASP-Seiten unterstützt, können Sie ADO-Objekte verwenden, um auf die ODBC-Datenbank zuzugreifen, ohne eine so große BDE auf die Site hochladen zu müssen, sodass Sie sie vollständig nutzen können Programmiervorteile von DELPHI und ASP zur Verbesserung von ISAPI/NSAPI/CGI.
----Nach dem Programmieren und Testen können Sie ADO-Objekte erfolgreich für den Zugriff auf die ODBC-Datenbank in DELPHI verwenden. Jetzt werde ich die Erfahrung aufschreiben und sie mit Ihnen teilen.
---- In der 32-Bit-DELPHI-Version können Sie eine Variantenvariable (z. B. AVariant) deklarieren und dann über CreateOleObject ein OLE-Objekt erstellen, z. B. AVariant:=CreateOleObject('ADODB.Connection'), um eine Instanz davon zu erhalten Datenbankverbindungsobjekt. Anschließend können Sie die Methoden und Eigenschaften des Objekts verwenden, um die ODBC-Datenbank zu betreiben.
----Im Folgenden finden Sie eine kurze Einführung in die ADO-Objekte, die für den Zugriff auf ODBC-Datenbanken verwendet werden, sowie in deren Methoden und Eigenschaften.
---- 1. Datenbankverbindungsobjekt (ADODB.Connection)
---- Dieses Objekt wird verwendet, um eine Verbindung mit der ODBC-Datenbank herzustellen, und alle Vorgänge in der Datenbank werden über diese Verbindung ausgeführt.
---- Das Datenbankverbindungsobjekt ADODB.Connection funktioniert wie das TDatabase-Objekt in Delphi.
---- Die Methode zum Einrichten eines Verbindungsobjekts lautet (AConnection ist eine Variable vom Typ Variant):
---- AConnection:=CreateOleObject('ADODB.Connection')
---- Die zum Herstellen einer Verbindung verwendete Methode ist Open und die Verwendungssyntax lautet (nehmen Sie das Objekt AConnection als Beispiel):
---- AConnection.Open(ConnectionString, UserId, Passwort)
----Die drei Parameter sind alle vom Typ String, wobei UserId und Password der Benutzername und das Passwort sind, die für den Zugriff verwendet werden
---- Wird in der Datenbank verwendet und kann weggelassen werden, da der Benutzername und das Benutzerkennwort auch in ConnectionString angegeben werden können. ConnectionString ist eine Zeichenfolge, die zur Beschreibung von ODBC-Datenquelleninformationen verwendet wird. Sein Format ist:
'PRovider=ProviderName;DSN=DSNName;DRIVER=driver;DATABASE=database;
---- In:
---- Anbieter: Datenanbieter, Standard ist MSDASQL, ist Microsoft OLEDB, wird normalerweise weggelassen
---- DSN: Die OBDC-Systemdatenquelle (DSN), die der zu öffnenden Datenbank entspricht. Dies ist ein optionaler Parameter.
---- TREIBER: Der Treibername, der für die zu öffnende Datenbank verwendet wird, z. B. der entsprechende Zugriff
----Microsoft Access Driver (*.mdb) ist ein optionaler Parameter
---- SERVER: Der Name des Servers, auf dem sich die zu öffnende Datenbank befindet. Er ist auf diesem Computer verfügbar (lokal) und ein optionaler Parameter.
---- DATENBANK: Der Name der zu öffnenden Datenbank, ein optionaler Parameter
---- UID: Der Benutzername, der für den Zugriff auf die Datenbank verwendet wird, ist ein optionaler Parameter
----PWD: Das Benutzerkennwort, das für den Zugriff auf die Datenbank verwendet wird, ist ein optionaler Parameter
---- Die oben genannten Parameter sind alle optionale Parameter, es müssen jedoch ausreichende Informationen bereitgestellt werden, um eine Systemdatenquelle zu beschreiben.
---- Wenn ein ODBC-System-DSN mit dem Namen MyDsn definiert wurde, können Sie die folgende Anweisung verwenden, um eine Datenbankverbindung herzustellen:
----
AConnection.Open('DSN=MyDsn');
---- Um Anwendungsfehler zu verhindern, wenn der DSN nicht vorhanden ist oder seine Einstellungen von anderen geändert werden, können Sie ADODB.Connection verwenden, um eine temporäre ODBC-Datenquelle zu erstellen. Dadurch kann sichergestellt werden, dass die Parametereinstellungen des System-DSN die wir verwenden, sind korrekt. Die folgende Anweisung kann einen temporären ODBC-System-DSN erstellen, der einer ACCESS-Datenbank entspricht
C:Inetpubwwwrootest.mdb AConnection.open('Driver={Microsoft Access Driver (*.mdb)};DBQ=C:inetpubwwwrootest.mdb')
---- Wenn Sie nach dem Herstellen einer ADODB.Connection die Operationsergebnisse (z. B. Löschen, Ändern, Aktualisieren usw.) nicht zurückgeben müssen, können Sie zu diesem Zeitpunkt normale SQL-Operationen für die Datenbank ausführen Methode Execute von ADODB.Connection. Die Verwendungssyntax lautet:
AConnection.Execute( strSQL );
---- Unter diesen ist strSQL die SQL-Anweisung zum Ausführen des Vorgangs. Der Löschvorgang kann beispielsweise sein: Löschen aus wfjcommu. Verwenden Sie AConnection.Close, um eine Datenbankverbindung zu schließen.
---- 2. Datensatzobjekt (ADODB.RecordSet)
---- Wenn Sie Abfragevorgänge ausführen und Abfrageergebnisse zurückgeben möchten oder die Datentabelle bequemer bedienen möchten, müssen Sie das Datensatzobjekt verwenden.
---- Das Datensatzobjekt ADODB.RecordSet funktioniert wie ein TTable- oder TQuery-Objekt in Delphi.
---- Die Methode zum Erstellen eines Datensatzobjekts lautet (ARecordSet ist eine Variable vom Typ Variant):
----
ARecordSet:=CreateOleObject('ADODB.RecordSet')
---- Die Methode zum Abrufen von Daten aus der Datentabelle ist die Open-Methode. Die spezifische Verwendungsmethode ist:
ARecordSet.Open( strCommand,ActiveConnection,intCursorType,intLockType,intCommandType);
---- Darunter: strCommand: string, ein Befehlsparameter. Es kann ein Tabellenname, eine SQL-Anweisung oder ein gespeicherter Prozedurname (StoredProc) auf dem Server sein. Der spezifische Parameter intCommandType muss angegeben werden.
---- ActiveConnection: Die zu verwendende Datenbankverbindung ist ein ADODB.Connection-Objekt.
---- intCursorType: lange Ganzzahl, Cursortyp des Datensatzes, optionale Parameter, siehe Kommentare im Programm.
---- intLockType: lange Ganzzahl, der Sperrtyp der Datentabelle, optionale Parameter, siehe Kommentare im Programm.
---- intCommandType: lange Ganzzahl, der Typ des Befehlsparameters, der zur Angabe der Rolle von strCommand verwendet wird. Sie können strCommand als Befehl (z. B. eine SQL-Anweisung) oder Datentabelle (TTable) oder gespeicherte Prozedur (StoredProc) angeben. Informationen zu optionalen Parametern finden Sie in den Kommentaren im Programm.
---- Wenn Sie eine SQL-Abfrage ausführen, können Sie die folgende Anweisung verwenden:
ARecordSet.Open('Select * from wfjcommu',adOpenStatic,adLockOptimistic,adCmdText);
---- Andere allgemeine Eigenschaften und Methoden im Vergleich zu TTable und TQuery sind wie folgt (Einzelheiten finden Sie in der ASP-Hilfedatei):
eof,bof: eof,bof. MoveFirst, MoveLast: First, LastMovePrevious, MoveNext: Prior, NextMove: MoveByAddNew: appendUpdate: PostClose: schließen
---- Löschen plus Update: Löschen, alle Änderungen an der Datentabelle müssen Update verwenden, um den Vorgang wirksam zu machen, was sich von Delphi unterscheidet
Fields[FieldNo]:Fields[FieldNo]Fields['FieldName']:FieldByName('FieldName')
---- 3. Andere gemeinsame Objekte (Objekte, die Delphi entsprechen):
----
ADODB.Field: TFieldADODB.Parameter: TParaADODB.Error: EDBEngineErrorADODB.Command: Keine ADODB.Property: Keine
---- Schauen wir uns ein Anwendungsbeispiel an. Es ist besser, zuzuhören, was andere sagen, als sich das tatsächliche Beispiel selbst anzusehen. In diesem Beispiel zeigen wir, wie Sie ADO-Objekte zum Abfragen, Hinzufügen von Datensätzen, Ändern von Datensätzen und Löschen von Datensätzen in einer Datentabelle verwenden. Informationen zur spezifischen Verwendung finden Sie in den Kommentaren im Programm. Wenn Sie Erfahrung in der Delphi-Datenbankprogrammierung haben, ist dies meiner Meinung nach nicht schwer zu verstehen.
---- In unserem Beispiel ist die verwendete Datenbank Test.MDB. Es gibt eine Datentabelle namens wfjcommu, die fünf Felder enthält: AName, Portable, Tel, BP und PostAddress, die Name, Mobiltelefonnummer und Telefonnummer darstellen , und Pager-Nummer bzw. Korrespondenzadresse.
----
procedure TForm1.Button1Click(Sender: TObject);{******************************************* *** ****************
---- Verwenden Sie ADO zum Betreiben einer ODBC-Datenbank. In diesem Programm wird eine temporäre ODBC-Systemdatenquelle erstellt, die auf eine MsAccess-Datenbank verweist. Anschließend werden die darin enthaltenen Datentabellen angezeigt, hinzugefügt, geändert, gelöscht und abgefragt. Hinweis: Bitte klicken Sie auf „Verwendet“. Die Anweisung enthält die ComObj-Einheit
************************************************** * ***}const{ Einige Konstantendeklarationen, Einzelheiten finden Sie in adovbs.inc }{ ---- Konstante Beschreibung von CommandType---- } adCmdUnknown = 0008;//Unbekannt, muss vom System beurteilt werden, langsam , Standardwert adCmdText = 0001;//Befehlsanweisung wie SQL-Anweisung adCmdTable = 0002;//Datentabellenname adCmdStoredProc = 0004;//Name der gespeicherten Prozedur {---- Konstante Beschreibung von CursorType---- } adOpenForwardOnly = 0;//Der Zugriff kann nur in einer Richtung von vorne nach hinten erfolgen, d. h der Standardwert adOpenKeyset = 1; //Änderungen an Daten durch andere Benutzer sind sichtbar, Hinzufügungen und Löschungen durch andere Benutzer sind jedoch nicht sichtbar adOpenDynamic = 2;//Das Hinzufügen, Ändern und Löschen von Daten durch andere Benutzer ist sichtbar adOpenStatic = 3;//Das Hinzufügen, Ändern und Löschen von Daten durch andere Benutzer ist nicht sichtbar {---- Konstante Beschreibung von LockType---} adLockReadOnly = 1; //Schreibgeschützt, der Standardwert adLockPessimistic = 2; //Beim Ändern gemäß einem einzelnen Datensatz sperren adLockOptimistic = 3;//Sperren eines einzelnen Datensatzes beim Aktualisieren nach einer Änderung. adLockBatchOptimistic = 4;//Sperren des Datensatzes beim Aktualisieren in Stapeln. var AConnection, ARecordSet: variant; intIndex: string; ODBC-Datenquelle, die auf eine MsAccess-Datenbank verweist und diesen DSN zum Herstellen einer Datenbankverbindung verwendet} AConnection := CreateOleObject('ADODB.Connection'); AConnection.Open('Driver={Microsoft Access Driver (*.mdb)};DBQ=C:inetpubwwwrootest'); {Erstellen Sie ein Datensatzobjekt und extrahieren Sie Daten aus der Datentabelle} ARecordSet := CreateOleObject('ADODB.RecordSet'); ARecordSet.open( 'wfjcommu',AConnection, adOpenStatic,adLockOptimistic,adCmdTable ); memo1.lines.add('********Der ursprüngliche Inhalt der Datentabelle ist wie folgt********'); Zeigt jeden Felddomänennamen an} strTemp := '; for intIndex := 0 to ARecordSet.Fields.count - 1 do strTemp := strTemp + ARecordSet.Fields[intIndex].name+';'; memo1.lines.add( strTemp ); {Anzeigen des Inhalts jedes Felds} while not ARecordSet.eof do begin strTemp := '; for intIndex := 0 to ARecordSet.Fields . count - 1 do strTemp := strTemp + ARecordSet.Fields [intIndex].value+';';memo1.lines.add( strTemp );//Zur nächsten Zeile wechseln, Nächstes Ende;//Add, Append ARecordSet.Fields [ 'AName'] := '1'; //Zugriff auf ARecordSet.Fields['Portable'] mit FieldByName := '2'; ARecordSet.Fields(2) := '3'; //Zugriff auf ARecordSet.Fields(3) := '4':= '5' in Form von Fields[index] ; ARecordSet.Update;//Update, Post ARecordSet.MoveFirst;//Zum ersten Element verschieben, First memo1.lines.add('********Der Inhalt der Datentabelle nach dem Hinzufügen eines Datensatzes ist wie folgt********'); {zeige den Inhalt jedes Feldes an} während nicht ARecordSet .eof do begin strTemp := ';for intIndex := 0 to ARecordSet Fields.count - 1 do strTemp := strTemp + ARecordSet.Fields[intIndex].value+';';memo1.lines.add( strTemp ); ARecordSet.MoveNext; //Zum nächsten Datensatz wechseln, Nächstes Ende; {Ändern Sie den letzten Datensatz} ARecordSet.Fields['AName'] := '11'; 'Portable'] := '22'; ARecordSet.Fields(2) := '33'; //Access ARecordSet.Fields(3) as Fields[index] := '44'; ARecordSet.Fields(4) := '55';//Update, Post ARecordSet.MoveFirst;// Move to the erstes Element, Erstes memo1.lines.add('********Der Inhalt der Datentabelle nach dem Ändern des letzten Datensatzes lautet wie folgt************'); der Inhalt jedes Feldes } während nicht ARecordSet.eof do begin strTemp := ';for intIndex := 0 to ARecordSet.Fields.count - 1 do strTemp := strTemp + ARecordSet.Fields[intIndex].value+';';memo1.lines.add( strTemp ); ARecordSet.MoveNext;//Zum nächsten Datensatz wechseln, Next end; {Den letzten Datensatz löschen} ARecordSet.MoveLast;//Zur letzten Zeile wechseln, Last ARecordSet.delete;//Löschen, löschen ARecordSet.Update;//Update, in Delphi nicht erforderlich ARecordSet.MoveFirst;//Zur ersten Zeile wechseln, First memo1.lines .add ('********Der Inhalt der Datentabelle nach dem Löschen des letzten Datensatzes lautet wie folgt********'); {Zeigt den Inhalt jedes Felds an} while not ARecordSet.eof fang doch an strTemp := '; for intIndex := 0 to ARecordSet.Fields.count - 1 do strTemp := strTemp + ARecordSet Fields[intIndex].value+';';memo1.lines.add( strTemp );/ /Zum nächsten Balken wechseln, Next end; ARecordSet.Close;{Datensatz schließen} {Verwenden Sie eine SQL-Anweisung zum Abfragen und fragen Sie Datensätze mit dem Namen „Zhang San“ ab} {Beachten Sie, dass die Zeichenfolge in der SQL-Anweisung in einfache Anführungszeichen gesetzt werden sollte} ARecordSet.open( 'select * from wfjcommu where AName = 'Zhang San' ', AConnection,adOpenStatic,adLockOptimistic, adCmdText ); memo1.lines.add('********Zhang Sans Inhalt ist wie folgt********'); + IntToStr ( ARecordSet.RecordCount ) + 'passende Datensätze' ); {zeige den Inhalt jedes Felds an} while not ARecordSet.eof do begin strTemp := '; = strTemp + ARecordSet.Fields [intIndex].value+';';memo1.lines.add( strTemp ); ARecordSet.MoveNext;//Zur nächsten Leiste wechseln, Nächstes Ende; {Schließen Sie den Datensatz und die Datenbankverbindung} ARecordSet.close;end;