AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Fehler beim Zugriff auf Datenbank
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler beim Zugriff auf Datenbank

Ein Thema von flobbie · begonnen am 25. Jan 2008 · letzter Beitrag vom 28. Jan 2008
Antwort Antwort
flobbie

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

Fehler beim Zugriff auf Datenbank

  Alt 25. Jan 2008, 21: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
Benutzerbild von TheProfi
TheProfi

Registriert seit: 30. Mai 2005
Ort: Emden
42 Beiträge
 
Delphi 10.3 Rio
 
#2

Re: Fehler beim Zugriff auf Datenbank

  Alt 28. Jan 2008, 11:41
Hi,

ich arbeite eigentlich immer mit ADO unter Delphi Version 7.

Anbei ein Beispiel. Vielleicht hilft es.

Delphi-Quellcode:
    if connectiontyp = 'MSSQLthen 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
Gruß
Georg Reimann
  Mit Zitat antworten Zitat
Benutzerbild von TheProfi
TheProfi

Registriert seit: 30. Mai 2005
Ort: Emden
42 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: Fehler beim Zugriff auf Datenbank

  Alt 28. Jan 2008, 11:43
Hi,

ich arbeite eigentlich immer mit ADO unter Delphi Version 7.

Anbei ein Beispiel. Vielleicht hilft es.

Delphi-Quellcode:
    if connectiontyp = 'MSSQLthen 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
Gruß
Georg Reimann
  Mit Zitat antworten Zitat
flobbie

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

Re: Fehler beim Zugriff auf Datenbank

  Alt 28. Jan 2008, 16:40
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz