AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi E2010 Inkompatible Typen: 'Integer' und 'Pointer'

E2010 Inkompatible Typen: 'Integer' und 'Pointer'

Ein Thema von bl3nder · begonnen am 8. Aug 2008 · letzter Beitrag vom 12. Aug 2008
Antwort Antwort
Seite 1 von 2  1 2   
bl3nder

Registriert seit: 18. Aug 2006
89 Beiträge
 
#1

E2010 Inkompatible Typen: 'Integer' und 'Pointer'

  Alt 8. Aug 2008, 16:12
Hallo,


Ich versuch mich grade an einem Model View Controller. Hierzu habe ich unter anderem 2 Units die mit einander kommunizieren.

Model.pas
Model_Database.pas


Model_Database.pas sieht vereinfacht so aus:


Delphi-Quellcode:
unit Model_Database;

interface

uses
  ZConnection,ZDataset,DBgrids, ZAbstractRODataset,
  ZAbstractDataset,ZSysUtils,ZPlainMySqlDriver,DB,Classes;

type

  TDatabase = class(TObject)
  private
    SQLQuery: TZQuery;
    DataSource: TDataSource;
    SQLConnection: TZConnection;
  public
    constructor Create();
    function DBSearch: TList; virtual; abstract;
    //...
  end;





  TWorkStationSearch = class(TDatabase)
  private
  public
    function DBSearch: TList; override;
  end;




implementation

uses Model;


//...


function TWorkstationSearch.DBSearch: TList; override;
var List: TList;
begin
  SQLQuery.SQL.Text := 'SELECT * FROM Workstations';
  SQLQuery.Open;

  while not SQLQuery.EOF do
    List.Add(SQLQuery.FieldByName('WorkstationID'));

  Result := List;
end;



end.


Model.pas sieht verkürtzt so aus

Delphi-Quellcode:

unit Model;

interface

uses
  ZConnection,ZDataset,DBgrids, ZAbstractRODataset,
  ZAbstractDataset,ZSysUtils,ZPlainMySqlDriver,DB,Contnrs,Classes,SysUtils,
  Model_Database;

type
  

  TMain = class(TObject)
  private
  public

    function DBSearch(): TObjectList; Virtual; Abstract;
    //...
  end;


//...


  TWorkstation = class(TMain)
  private
    ID: Integer;
    Username: String;
    Room: String;
    FormerUserName: String;
    Documentation: String;

  public
    constructor Create(DatabaseID: Integer);
    destructor Destroy();


    function GetUsername: String;
    
    //...

  end;




  TWorkstationSearch = class(TMain)
  private
  public
    function DBSearch(): TObjectList; Override;
  end;




implementation

constructor TWorkstation.Create(DatabaseID: Integer);
begin
  ID := DatabaseID;
  Username := 'testname'+IntToStr(DatabaseID);
  Room := '123';
  FormerUsername := 'alt';
  Documentation := 'nc';
end;




function TWorkstation.GetUsername;
begin
  Result := Username;
end;



function TWorkstationSearch.DBSearch;
var WsSearch: Model_Database.TWorkstationSearch;
var Workstation: TWorkstation;
var List: TList;
var WsList: TObjectList;
var I: Integer;
begin
  I := 0;
  List := WsSearch.DBSearch();
  while (I<List.Count) do
  begin
    Workstation.Create(List[I]); // <------------------ FEHLERZEILE
    WsList.Add(Workstation);
    Workstation.Destroy;
    Inc(I);
  end;

  Result := WsList;
end;



end.


Beim Kompilieren von Model.pas sagt er mir dann den folgenden Fehler:

Zitat:
[Pascal Fehler] Model.pas(279): E2010 Inkompatible Typen: 'Integer' und 'Pointer'


Wieso ist die Liste nicht eine Liste von Integern ? So habe ich es doch in obigen Funktion deklariert. Oder etwa nicht ?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: E2010 Inkompatible Typen: 'Integer' und 'Pointer'

  Alt 8. Aug 2008, 16:16
Mal abgesehen davon, dass ich eine Liste nicht als Funktionsrückgabewert definieren würde: TList ist eine Liste von Pointern. Das sind zwar intern 32-Bit-Integer, trotzdem musst Du casten.List.Add(Pointer(SQLQuery.FieldByName('WorkstationID'))); P.S.: Wo ist eigentlich das TList.Create? Hab ich das übersehen?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: E2010 Inkompatible Typen: 'Integer' und 'Pointer'

  Alt 8. Aug 2008, 16:16
Erstmal: Ein var reicht.
TList ist eine Liste von Pointern. Wenn du eine Integer-Liste willst, musst du casten.

Objekte werden mit Instanz := TKlasse.Create erzeugt, nicht mit Instanz.Create.
Auch Listen sind Objekte, die du erzeugen musst.

Außerdem darfst du das Objekt nicht gleich wieder freigeben.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: E2010 Inkompatible Typen: 'Integer' und 'Pointer'

  Alt 8. Aug 2008, 16:19
constructor TWorkstation.Create(DatabaseID: Integer); da steht eindeutig integer und du übergibst eben einen Pointer. Von daher verstehe ich nicht was an der Fehlermeldung seltsam sein soll.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: E2010 Inkompatible Typen: 'Integer' und 'Pointer'

  Alt 8. Aug 2008, 16:19
Zitat von DeddyH:
TList ist eine Liste von Pointern.
Zitat von Apollonius:
TList ist eine Liste von Pointern.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: E2010 Inkompatible Typen: 'Integer' und 'Pointer'

  Alt 8. Aug 2008, 16:22
Das habe ich getippt, bevor der rote Kasten kam.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: E2010 Inkompatible Typen: 'Integer' und 'Pointer'

  Alt 8. Aug 2008, 16:29
[OT] Ich finde es nur witzig, dass der Wortlaut haargenau übereinstimmt [/OT]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: E2010 Inkompatible Typen: 'Integer' und 'Pointer'

  Alt 8. Aug 2008, 16:36
Sogar die Uhrzeit. Das ist ein Omen! Evtl...
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: E2010 Inkompatible Typen: 'Integer' und 'Pointer'

  Alt 8. Aug 2008, 16:41
Die letzte Person, bei der mir das häufiger passiert ist, habe ich geheiratet.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
bl3nder

Registriert seit: 18. Aug 2006
89 Beiträge
 
#10

Re: E2010 Inkompatible Typen: 'Integer' und 'Pointer'

  Alt 12. Aug 2008, 10:31
Hallo,

Danke fuer die Antworten,

Ich habe nun auch die Liste und die Instanzen durch List := TList.Create; und Workstation := TWorkstation.Create(List[I]); erstellt.

Dennoch ändert das nichts am Problem. Dass ich die Instanz wieder freigebe liegt daran, dass in jeder Schleife eine neue Instanz angelegt werden soll, sodass in der Liste nicht öfter das gleiche Objekt zu finden ist. Vielleicht habe ich da aber auch ein Vorstellungsproblem. Soweit ist noch Workstation.Destroy mit eingebaut...

Delphi-Quellcode:
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(List[I]);
    WsList.Add(Workstation);
    Workstation.Destroy;
    Inc(I);
  end;

  Result := WsList;
end;

Nun weiß ich nicht genau, wie ich diese Liste von Pointern casten kann, sodass in der Liste nur die Datenbank IDs stehen.
Würde mir jemand auf die Sprünge helfen ?

Danke
Mfg
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:04 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