AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Delphi hängt sich auf mit selbstgemachten Komponenten
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi hängt sich auf mit selbstgemachten Komponenten

Ein Thema von Schuster · begonnen am 7. Jun 2005 · letzter Beitrag vom 9. Jun 2005
Antwort Antwort
Benutzerbild von Schuster
Schuster

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

Delphi hängt sich auf mit selbstgemachten Komponenten

  Alt 7. Jun 2005, 13:56
Hallo
habe mit dem Proggen von Komponenten angefangen
siehe LINK

jetzt hab ich das Problem wenn ich ein neues Projekt mit den Komponenten mach und dann auf alles schließen
klicke hängt Delphi und reagiert nicht mehr

Hat jemand eine Idee an was das liegen kann??

P.s Meine Komponenten functionieren mit den implementierten functinen bist jetzt einwandfrei.
Markus Schuster
__________________
Markus
http://members.chello.at/delphi-developer
  Mit Zitat antworten Zitat
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, 14: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
Benutzerbild von Schuster
Schuster

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

Re: Delphi hängt sich auf mit selbstgemachten Komponenten

  Alt 9. Jun 2005, 16:38
Push

Hab hier mal meine Komponenten angehängt.
Vielleicht findet ja einer den Fehler
Angehängte Dateien
Dateityp: zip tmaxmysql_918.zip (27,4 KB, 3x aufgerufen)
Markus Schuster
__________________
Markus
http://members.chello.at/delphi-developer
  Mit Zitat antworten Zitat
Benutzerbild von Taladan
Taladan

Registriert seit: 5. Aug 2003
Ort: Osnabrück
505 Beiträge
 
Delphi 2005 Professional
 
#4

Re: Delphi hängt sich auf mit selbstgemachten Komponenten

  Alt 9. Jun 2005, 17:05
Da ich keine Datenbankanbindungen machen kann, konnte ich es nicht probieren. Aber Probier mal folgendes: Schreib einen Destruktor, der die Verbindung trennt und auch alle Variablen (wieder) frei gibt.
Marco
Wer Rechtschreibfehler findet, der darf sie behalten

Carpe Diem - Nutze den Tag (und zwar den ganzen!)
  Mit Zitat antworten Zitat
Benutzerbild von Taladan
Taladan

Registriert seit: 5. Aug 2003
Ort: Osnabrück
505 Beiträge
 
Delphi 2005 Professional
 
#5

Re: Delphi hängt sich auf mit selbstgemachten Komponenten

  Alt 9. Jun 2005, 17:19
Und das
Delphi-Quellcode:
procedure TMaxMySqlQuery.Notification(Acomponent : TComponent; Operation: TOperation);
begin
   inherited Notification(AComponent, Operation);
   if (Operation = opRemove) and (AComponent is TMaxMySqlCon) then
      TSource := nil;
end;
Das müßte eigenlich dein Fehler sein, denn du überschreibst die Notification-Funktion Diese wird bei jeder Veränderung, alos Erzeugen oder Löschen aufgerufen. Jedoch macht deine Funktion nichts anderes als deine If-Anweisung. Die eigendliche "Veränderungsfunktion" wird nicht aufgerufen. Leider weiß ich nicht, ob die in deinen Fall vor oder nach der If-Schleife kommen muß. Könnte sein, das dies je nach Operation auch verschieden sein kann.

Gruß Marco
Marco
Wer Rechtschreibfehler findet, der darf sie behalten

Carpe Diem - Nutze den Tag (und zwar den ganzen!)
  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 11:00 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