Einzelnen Beitrag anzeigen

flobbie

Registriert seit: 24. Jan 2008
7 Beiträge
 
#1

Fehler beim Zugriff auf Datenbank

  Alt 25. Jan 2008, 20:10
Datenbank: MySQL • Version: 5 • Zugriff über: dbexpress
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:
uses
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DBXpress, WideStrings, DB, SqlExpr, FMTBcd, Provider, DBClient, DBCtrls;
Mein geschriebener Code sieht so aus:
Delphi-Quellcode:
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;
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.

Beim Ausführen sagt er mir jetzt:
dataset.ProviderName := provider;
Zitat:
[Pascal Fehler] Unit1.pas(84): E2010 Inkompatible Typen: 'string' und 'TDataSetProvider'
[Pascal Fataler Fehler] Project1.dpr(5): F2063 Verwendete Unit 'Unit1.pas' kann nicht compiliert werden
Ok. Dann habe ich erstmal statt provider, 'mysqlProvider' geschrieben, was ich vorher bei provider.Name angegeben habe.
Dann geht er weiter und ich bekomme einen neuen Fehler.
datasource := TDataSource.Create(Self);
Zitat:
Erste Gelegenheit für Exception bei $7C812A5B. Exception-Klasse EDatabaseError mit Meldung 'Für diese Operation ist die Eigenschaft SQLConnection erforderlich'. Prozess Project1.exe (1660)
Ich habe keine Ahnung, warum er Delphi mir sagt, dass wenn ich die Variable bei dataset.ProviderName angebe, einen Fehler ausgibt.
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
  Mit Zitat antworten Zitat