![]() |
Re: E2010 Inkompatible Typen: 'Integer' und 'Pointer'
Hi,
da der Code gekürzt ist, weiß ich nicht, ob Du zu viel gekürzt hast oder ob es einfach fehlt.
Delphi-Quellcode:
Fehlt hier nicht noch ein SQLQuery.Next?
while not SQLQuery.EOF do
List.Add(SQLQuery.FieldByName('WorkstationID')); |
Re: E2010 Inkompatible Typen: 'Integer' und 'Pointer'
Danke das hat unter anderem auch noch gefehlt :roll:
Die DBSearch funktion sieht mittlerweile so aus
Delphi-Quellcode:
Nun bringt er mir diesen Fehler
function TWorkstationSearch.DBSearch;
var WsSearch: Model_Database.TWorkstationSearch; Workstation: TWorkstation; List: TList; WsList: TObjectList; I: Integer; begin I := 0; List := TList.Create; List := WsSearch.DBSearch(); while (I<List.Count) do begin Workstation := TWorkstation.Create(Integer(List[I])); WsList.Add(Workstation); Workstation.Destroy; Inc(I); end; Result := WsList; end; Zitat:
|
Re: E2010 Inkompatible Typen: 'Integer' und 'Pointer'
*Uhh*, Listen als Funktionsrückgabewert, Funktionen ganz ohne Rückgabewert, fehlendes Instanziieren von Listen... ich steig da nicht mehr richtig durch.
|
Re: E2010 Inkompatible Typen: 'Integer' und 'Pointer'
Hallo zusammen,
Zitat:
D.h die Einträge der Liste zeigen irgendwo in die Botanik, oder hab ich da irgendetwas falsch verstanden? Und ansonsten geht es doch um eine Liste von "Workstation-ID"s, da damit nicht gerechnet werden muß/darf, würde ich die als Strings in eine TStringlist packen und gut ist. Doppelte Einträge kann man prima durch sortieren und vergleichen finden, oder im Vorfeld bei der Abfrage durch
Delphi-Quellcode:
.
Select distinct * from..
oder Select distinct WorkstationID from.. edit: Die restlichen Informationen (Username,Room etc.) erst abholen wenn ich weiß was ich brauche, das verringert den Traffic doch ganz schön Gruß K-H |
Re: E2010 Inkompatible Typen: 'Integer' und 'Pointer'
Ok ich gebe zu es ist ziemlich unübersichtlich geworden, nochmal zur Erklärung:
In meiner Datenbank hab ich eine Tabelle "Workstation". Diese hat neben einer ID auch Username etc. In meinem Model_Database.pas habe ich nun die SQL Abfrage in einer Funktion die so aussieht:
Delphi-Quellcode:
Die Funktion soll eine Liste mit den IDs der gefundenen Datensätze zurückliefern (Integer)
// Wird in Model.TWorkstationSearch.DBSearch aufgerufen
function TWorkstationSearch.DBSearch; var List: TList; begin List := TList.Create; SQLQuery.SQL.Text := 'SELECT * FROM Workstation'; SQLQuery.Open; while not SQLQuery.EOF do begin List.Add(SQLQuery.FieldByName('WorkstationID')); SQLQuery.Next; end; Result := List; end; Nun benutzt eine Funktion in Model.pas die obige Funktion (Beide Funktionen besitzen leider den gleichen Namen)
Delphi-Quellcode:
function TWorkstationSearch.DBSearch;
var WsSearch: Model_Database.TWorkstationSearch; MyWorkstation: TWorkstation; List: TList; WsList: TObjectList; I: Integer; begin I := 0; List := TList.Create; List := WsSearch.DBSearch(); // Ruft Model_Database.TWorkstationSearch.DBSearch auf // Die Liste sollte nun mit den Datenbank IDs befüllt sein while (I<List.Count) do begin MyWorkstation := TWorkstation.Create(Integer(List[I])); // Ruft den constructor auf WsList.Add(MyWorkstation); // <--- Hier wird einer TObjectList ein TWorkstation Objekt übergeben, ka ob das so geht... Inc(I); end; Result := WsList; end; // wird in Model.TWorkstationSearch.DBSearch aufgerufen constructor TWorkstation.Create(DatabaseID: Integer); begin ID := DatabaseID; Username := 'testname'+IntToStr(DatabaseID); Room := '123'; FormerUsername := 'alt'; Documentation := 'nc'; end; In meiner ViewController.pas möchte ich nun einen Testlauf durchführen:
Delphi-Quellcode:
procedure TMainForm.JvTransparentButton1Click(Sender: TObject);
var MyWorkstation: Model.TWorkstation; WsSearch: Model.TWorkstationSearch; WsList: TObjectList; // <-- Hier will ich alle Workstations in eine Liste packen I: Integer; begin I := 0; WsList := WsSearch.DBSearch(); while (I<WsList.Count) do begin MyWorkstation := WsList[I]; // <--- [Pascal Fehler] ViewController.pas(40): E2010 Inkompatible Typen: 'TWorkstation' und 'TObject' Showmessage(MyWorkstation.GetUsername); Inc(I); end; end; |
Re: E2010 Inkompatible Typen: 'Integer' und 'Pointer'
Nochmal:
Zitat:
Zitat:
Zitat:
Delphi-Quellcode:
Aber ich würde die Listen als Parameter übergeben, das mindert die Gefahr von Speicherlecks.
MyWorkstation := WsList[I] as Model.TWorkstation; // der Fehler sollte nun weg sein
|
Re: E2010 Inkompatible Typen: 'Integer' und 'Pointer'
Zitat:
Delphi-Quellcode:
unit Test;
interface type TMyClass = class(TObject) function FuncOne(a: Integer): Integer; procedure ProcOne(const s: string); end; function FuncTwo(const x, y: Double): Double; implementation uses Dialogs, SysUtils; function FuncThree(const s: string): string; forward; function TMyClass.FuncOne; begin Result := 2 * a; end; procedure TMyClass.ProcOne; begin ShowMessage(s); end; function FuncTwo; begin Result := x + y; end; function FuncThree; begin Result := UpperCase(s); end; end. |
Re: E2010 Inkompatible Typen: 'Integer' und 'Pointer'
Schau an, das war mir neu. Danke für die Erläuterung :thumb:
|
Re: E2010 Inkompatible Typen: 'Integer' und 'Pointer'
Danke für eure Hilfe !
Zumindest mit einer Stringlist hat es jetzt funktioniert. Nun habe ich noch Probleme mit der Zeos Komponente, dazu werde ich einen anderen Thread erstellen (hoffentlich ist das ok..) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:14 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