Einzelnen Beitrag anzeigen

Benutzerbild von Schuster
Schuster

Registriert seit: 21. Okt 2004
Ort: Wien
176 Beiträge
 
Delphi XE7 Architect
 
#2

Re: Delphi hängt sich auf mit selbstgemachten Komponenten

  Alt 7. Jun 2005, 15:46
Ich kapier das nicht Delphi hängt sich nur auf wenn ich meine Komponenten in einem
Projekt verwende sonst nicht

Hab ich vorher vergessen

Delphi-Quellcode:
unit MaxMySqlCon;

interface

uses
  SysUtils, Classes, mysql,Dialogs;

type
  TMaxMySqlCon = class(TComponent)
  private
    { Private-Deklarationen }

    FHost : String;
    FUser: String;
    FPort: Integer;
    FPass : String;
    FDatenbank : String;

    Verbindung : Boolean;
  protected
    { Protected-Deklarationen }

  public
    { Public-Deklarationen }
    _MySql : Pmysql;
    
    function Connect():boolean;
    function disconnect():boolean;
    function Connected():boolean;

  published
    { Published-Deklarationen }
    property Host : String Read FHost Write FHost;
    property User : String Read FUser Write FUser;
    property Port : Integer Read FPort Write FPort;
    property Password : String Read FPass Write FPass;
    property DB : String Read FDatenbank Write FDatenbank;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('MaxMySql', [TMaxMySqlCon]);
end;

{ ************************Verbindung aufbauen********************************}
function TMaxMySqlCon.Connect():boolean;
begin
  if Connected = false then
  begin
    _mySql:= mysql_init(nil); //Objekt erzeugen
      if _mySql=nil then
      begin
        ShowMessage('Kann Verbindungsobjekt nicht initialisieren');
        result:= false;
        exit;
      end;
  //Verbindung herstellen
    if mysql_real_connect(_mySql,PChar(Fhost),PChar(FUser),PChar(FPass),PChar(FDatenbank), +
                        FPort,nil,0) = nil then
    begin
      result:= false;
      ShowMessage(mysql_error(_mySql));
      exit;
    end;
  Verbindung:= true;
  result:= true;
  end
  else
    result:=true; //Es besteht noch eine Verbindung (Connected=true)
end;

{ ************************noch Verbunden??********************************}
function TMaxMySqlCon.Connected():boolean;
begin
   try
   begin
      if _MySql=nil then //Wenn Objekt nicht vorhanden raus
      begin // ist notwendig da sonst Exception kommt
          result:=false;
          exit;
      end;
      if Verbindung=false then //Globale Var die in Connect und disconect gesetzt wird
      begin // ist notwendig da sonst Exception kommt
          result:= false;
          exit;
      end;
      if _MySql<>nil then
      begin
        if mysql_ping(_MySql)=0 then
          result:= true
        else
          result:= false;
      end
      else
        result:=false;
   end;
   except
    result:=false;
   end;
end;

{ ************************Verbindung trennen********************************}
function TMaxMySqlCon.disconnect():boolean;
begin
    if Connected then
    begin
      mysql_close(_mysql);
      Verbindung:=false;
      result:= true;
    end
    else
      result:= false;
end;
end.
Delphi-Quellcode:
unit MaxMySqlQuery;

interface

uses
  SysUtils, Classes,mysql,MaxMySqlCon, Dialogs;

type
  TMaxMySqlQuery = class(TComponent)//(TMaxMySqlCon) //Vererbt von TMaxMySqlCon
  private
    { Private-Deklarationen }
    TSource : TMaxMySqlCon;

    SQL_Text : PChar;
    SQL_Result : PMYSQL_RES;
// SQL_Row : PMYSQL_ROW;


  protected
    { Protected-Deklarationen }
    procedure Notification(AComponent: TComponent; Operation: TOperation);override;

  public
    { Public-Deklarationen }
    procedure Clear();
    procedure Add(SQL_String:String);
    function Open(): PMYSQL_RES;
    procedure ExecSQL();
    function RowCount():Integer;

  published
    { Published-Deklarationen }
    property Datasource : TMaxMySqlCon read TSource write TSource;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('MaxMySql', [TMaxMySqlQuery]);
end;
{******************************************************************************
                  Notification überschreiben
*******************************************************************************}

procedure TMaxMySqlQuery.Notification(Acomponent : TComponent; Operation: TOperation);
begin
   if (Operation = opRemove) and (AComponent is TMaxMySqlCon) then
      TSource := nil;
end;

{******************************************************************************
                              Sql Clear
*******************************************************************************}

procedure TMaxMySqlQuery.Clear();
begin
    mysql_free_result(SQL_Result);
end;

{******************************************************************************
                            Sql Add
*******************************************************************************}

procedure TMaxMySqlQuery.Add(SQL_String:String);
begin
    SQL_Text:=PChar(SQL_String);
end;

{******************************************************************************
                            Sql Open
*******************************************************************************}

function TMaxMySqlQuery.Open(): PMYSQL_RES;
//var x : Integer;
begin
    if TSource.Connected then
    begin
    mysql_real_query(TSource._MySql,SQL_Text,length(SQL_Text));

    SQL_Result := mysql_store_result(TSource._MySql); //alle Datensätze vom Server anfordern
      if TSource._MySql = nil then
      begin
        ShowMessage('Es konnten keine Datensätze zurückgebenen werden. Ursache: ' + mysql_error(TSource._MySql));
        result:= nil;
        Exit;
      end;
    end
    else
      ShowMessage('Kann Abfrage nicht durchführen da keine Verbindung zum Server besteht');

// x:= mysql_num_rows(Sql_Result);
    result:= SQL_Result;
end;

{******************************************************************************
                            Sql ExecSQL
*******************************************************************************}

procedure TMaxMySqlQuery.ExecSQL();
begin

end;

{******************************************************************************
                            Row Count        -1 wenn nicht verbunden
*******************************************************************************}

function TMaxMySqlQuery.RowCount():Integer;
begin
  if TSource.Connected then
     result:= mysql_num_rows(SQL_Result)
  else
    result:= -1;
end;
end.
Markus Schuster
__________________
Markus
http://members.chello.at/delphi-developer
  Mit Zitat antworten Zitat