![]() |
Delphi hängt sich auf mit selbstgemachten Komponenten
Hallo
habe mit dem Proggen von Komponenten angefangen :-D siehe ![]() 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 :wall: Hat jemand eine Idee an was das liegen kann?? P.s Meine Komponenten functionieren mit den implementierten functinen bist jetzt einwandfrei. |
Re: Delphi hängt sich auf mit selbstgemachten Komponenten
Ich kapier das nicht Delphi hängt sich nur auf wenn ich meine Komponenten in einem
Projekt verwende sonst nicht :wall: 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. |
Re: Delphi hängt sich auf mit selbstgemachten Komponenten
Liste der Anhänge anzeigen (Anzahl: 1)
Push :stupid:
Hab hier mal meine Komponenten angehängt. Vielleicht findet ja einer den Fehler |
Re: Delphi hängt sich auf mit selbstgemachten Komponenten
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.
|
Re: Delphi hängt sich auf mit selbstgemachten Komponenten
Und das
Delphi-Quellcode:
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.
procedure TMaxMySqlQuery.Notification(Acomponent : TComponent; Operation: TOperation);
begin inherited Notification(AComponent, Operation); if (Operation = opRemove) and (AComponent is TMaxMySqlCon) then TSource := nil; end; Gruß Marco |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:45 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-2025 by Thomas Breitkreuz