![]() |
Datenbank: MySQL • Version: 5 • Zugriff über: dbexpress
Fehler beim Zugriff auf Datenbank
Hi,
ich habe in letzter Zeit versucht mit Delphi eine SQL-Verbindung zu meinem Server aufzubauen. Das hat mit den Komponenten und der Oberfläche dann auch super funktioniert. Da ich noch nicht so lange mit Delphi arbeite, und am Lernen bin, wollte ich es gerne nochmal ohne Oberfläche mit einem Code machen. Dann habe ich das geschrieben. Leider habe ich da einen Fehler drin, ich sehe ihn aber nicht. Er unterstreicht nichts rot, und ich denke ich habe auch alle Klassen importiert.
Delphi-Quellcode:
Mein geschriebener Code sieht so aus:
uses
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DBXpress, WideStrings, DB, SqlExpr, FMTBcd, Provider, DBClient, DBCtrls;
Delphi-Quellcode:
Ich hatte, bis ich das DataSetProvider und die danach erstellt hatte, keine Fehler. Also SQL Query und die Connection funktioniert. Habe ich extra getestet, in dem ich eine nicht funktionierende Tabelle angegeben habe, und eine Antwort vom MySQL-Server bekommen habe, das die nicht vorhanden sei.
procedure TForm1.FormCreate(Sender: TObject);
var mysql : TSQLConnection; query : TSQLQuery; provider: TDataSetProvider; dataset : TClientDataSet; datasource : TDataSource; texteng : TDBText; begin //SQL Verbindung mysql := TSQLConnection.Create(Self); mysql.Connected := false; mysql.ConnectionName := 'OpenMySQL50'; mysql.DriverName := 'OpenMySQL50'; mysql.LoginPrompt := false; mysql.Params.Values['DriverName'] := 'OpenMySQL50'; mysql.Params.Values['HostName'] := 'IP'; mysql.Params.Values['Database'] := 'datenbankname'; mysql.Params.Values['User_Name'] := 'datenbanktabelle'; mysql.Params.Values['Password'] := 'datenbankpasswort'; mysql.Params.Values['BlobSize'] := '-1'; mysql.GetDriverFunc := 'getSQLDriverMYSQL50'; mysql.KeepConnection := true; mysql.LibraryName := 'dbxopenmysql50.dll'; mysql.LoadParamsOnConnect := false; mysql.Name := 'mysqlVerbindung'; mysql.VendorLib := 'libmysql.dll'; mysql.Connected := true; mysql.Open; //Query query := TSQLQuery.Create(Self); query.Active := false; query.MaxBlobSize := 0; query.ObjectView := false; query.ParamCheck := true; query.SQL.Text := 'SELECT en FROM en_de WHERE id=1'; query.SQLConnection := mysql; query.GetMetadata := false; query.Name := 'mysqlQuery1'; query.NumericMapping := false; query.Active := true; mysql.Close; mysql.Free; //DataSetProvider provider := TDataSetProvider.Create(Self); provider.DataSet := query; provider.Constraints := true; provider.Exported := true; provider.Name := 'mysqlProvider'; provider.ResolveToDataSet := false; provider.UpdateMode := upWhereAll; //DataSet dataset := TClientDataSet.Create(Self); dataset.Active := false; dataset.AutoCalcFields := true; dataset.ProviderName := provider; dataset.ObjectView := true; dataset.StoreDefs := false; dataset.ReadOnly := false; dataset.AggregatesActive := false; dataset.DisableStringTrim := false; dataset.FetchOnDemand := true; dataset.Name := 'mysqlDataSet'; dataset.Active := true; //DataSource datasource := TDataSource.Create(Self); datasource.Enabled := false; datasource.DataSet := dataset; datasource.AutoEdit := true; datasource.Name := 'mysqlDataSource'; datasource.Enabled := true; //Englischer Text texteng := TDBText.Create(Self); texteng.Enabled := false; texteng.DataField := 'en'; texteng.DataSource := datasource; texteng.Align := alNone; texteng.AlignWithMargins := false; texteng.AutoSize := true; texteng.Height := 57; texteng.Left := 40; texteng.Enabled := true; end; Beim Ausführen sagt er mir jetzt: dataset.ProviderName := provider; Zitat:
Dann geht er weiter und ich bekomme einen neuen Fehler. datasource := TDataSource.Create(Self); Zitat:
Ich habe bei den anderen Komponenten doch auch die Variable angegeben. Warum geht das hier nicht. Eine Zusatzinformationen: Die Form ist ganz leer. Ich habe bis jetzt nur über die Textebene gearbeitet. Ich danke euch für das Lesen meines Codes und für eure Hilfen. Mit freundlichen Grüßen Flobbie |
Re: Fehler beim Zugriff auf Datenbank
Hi,
ich arbeite eigentlich immer mit ADO unter Delphi Version 7. Anbei ein Beispiel. Vielleicht hilft es.
Delphi-Quellcode:
Gruß
if connectiontyp = 'MSSQL' then begin //wird aus Auswahlbox ermittelt
try adotest.ConnectionString := 'Provider=SQLOLEDB.1;' + 'Integrated Security=SSPI;' + 'Persist Security Info=False;' + 'Initial Catalog='+ Database + ';' + 'Data Source=' + server + ';'; adotest.Connected := true; showmessage('Verbindung erfolgreich getestet!'); except showmessage('Datenbank konnte nicht verbunden werden!'); end; //try end; //if connectiontyp = 'MDB' then |
Re: Fehler beim Zugriff auf Datenbank
Hi,
ich arbeite eigentlich immer mit ADO unter Delphi Version 7. Anbei ein Beispiel. Vielleicht hilft es.
Delphi-Quellcode:
Gruß
if connectiontyp = 'MSSQL' then begin //wird aus Auswahlbox ermittelt
try adotest.ConnectionString := 'Provider=SQLOLEDB.1;' + 'Integrated Security=SSPI;' + 'Persist Security Info=False;' + 'Initial Catalog='+ Database + ';' + 'Data Source=' + server + ';'; adotest.Connected := true; showmessage('Verbindung erfolgreich getestet!'); except showmessage('Datenbank konnte nicht verbunden werden!'); end; //try end; //if connectiontyp = 'MDB' then |
Re: Fehler beim Zugriff auf Datenbank
Hi,
ich danke dir erstmal für deine Antwort. Das Problem das ich mit ADO habe, das ich mit der TADOConnection keine Verbindung zu meinem Server aufbauen kann. Oder auf jedenfall habe ich es nicht geschafft. Er hat dann immer gesagt, entweder der Server exisitert nicht oder ich habe kein Zugriff. Mit dbexpress hat es funktioniert. Und jetzt wollte ich halt mal versuchen, eine Verbindung, ohne die Oberfläche, aufzubauen. Das heißt nicht einfach die TSQLConnection aufs Fenster ziehen, sondern das mit .Create(self) die Objekte zu erstellen und dann die Eigenschaften. Aber ich probiere jetzt schon so lange, aber immer ist Delphi mit dem "dataset.ProviderName := provider;" nicht einverstanden. Ich würde auch auf ADO umsteigen ( benutze Turbo Delphi ), nur da habe ich halt immer das Problem das er sich nicht verbindet. Nochmal vielen Dank für deine Antwort. Mit freundlichen Grüßen Flobbie |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz