Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Data Source (https://www.delphipraxis.net/102057-data-source.html)

pronny31 22. Okt 2007 20:40

Datenbank: Firebird • Version: 2.0 • Zugriff über: Delphi 5 Interbase

Data Source
 
Habe mal ne "Verständnisfrage" :

Ich habe folgendes vor ich möchte zunächst aus einer Datenbank (Firebird 2.0) mittels eines IBQuery , DataSource und DBMemo ein Memofeld aus einer Datenbank auslesen.
Meine Frage lautet : In welcher Form liegt die Datenmenge in der DataSource - Komponente .... ?
Wie kann ich dann anschließend diese Datenmenge einem Memofeld zuweisen ...?
Es geht wie gesagt nurums Verständnis ich will nicht zwingend nach Code fragen ?

vielen dank für eure mühe

mkinzler 22. Okt 2007 20:43

Re: Data Source
 
Eine DataSource ist nur einen Verbindungskomponente.
Die datensensitiven VCL-Komponenten besitzen die Eigenschaft DataSource mit der sie sich mit einer DataSource verbinden lassen.

DeddyH 22. Okt 2007 20:44

Re: Data Source
 
Du meinst, mit einem Dataset.

mkinzler 22. Okt 2007 20:46

Re: Data Source
 
Nein DBMemos, DBEdits usw. werden doch mit einer DataSource verbunden.

pronny31 22. Okt 2007 20:46

Re: Data Source
 
Ja genau !
Wie kann ich jetzt den Datensatz meiner Abfrage in ein Memo zur Ansicht packen ?

mkinzler 22. Okt 2007 20:49

Re: Data Source
 
Delphi-Quellcode:
DataSource.DataSet := IBQuery;
DBMemo.DataSource := DataSource;
DBMemo.DataField := <Feld>;

DeddyH 22. Okt 2007 20:56

Re: Data Source
 
Was ich meinte ist, dass eine DataSource die Verbindung zwischen datensensitiven Komponenten und einer Datenmenge herstellt.

pronny31 22. Okt 2007 21:01

Re: Data Source
 
Delphi-Quellcode:
unit mainUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DBCtrls, DB, IBDatabase, IBCustomDataSet, IBQuery,
  IBTable, Grids, DBGrids;

type
  TmainForm = class(TForm)
    IBDatabase1: TIBDatabase;
    IBTransaction1: TIBTransaction;
    DataSource1: TDataSource;
    DBMemo1: TDBMemo;
    IBQuery1: TIBQuery;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  mainForm: TmainForm;

implementation

{$R *.dfm}
Begin
        MainForm.DataSource1.DataSet:= MainForm.IBQuery1;
        MainForm.DBMemo1.DataSource := MainForm.DataSource1;
        MainForm.DBMemo1.DataField := 'MEMO1';

end.
Habe es hiermit versucht es kommt eine Speicherzugriffsverletzung ?

mkinzler 22. Okt 2007 21:01

Re: Data Source
 
Zitat:

Zitat von DeddyH
Was ich meinte ist, dass eine DataSource die Verbindung zwischen datensensitiven Komponenten und einer Datenmenge herstellt.

Indirekt ja.

DeddyH 22. Okt 2007 21:10

Re: Data Source
 
*Aua* pronny31, Grundlagenwissen aneignen!

pronny31 22. Okt 2007 21:13

Re: Data Source
 
Schon klar wobei ich alle einstellungen vorgenommen habe ich habe alle Komponenten im Objekt - Inspektor vorgenommen inkl. des SQL-Statements der IB Query alle Komponenten sind aktiv und wenn ich ne Tabellen nehme ist das ganze auch kein Problem ?

DeddyH 22. Okt 2007 21:15

Re: Data Source
 
Mach mal einen Doppelklick auf die Form, füge dort die 3 Zeilen Code ein und lösche die 4 geposteten Zeilen im implementation-Abschnitt (nicht das end.).

pronny31 22. Okt 2007 21:25

Re: Data Source
 
Habe ich gemacht und trotzdem kommt die Speicherverletzung !

Delphi-Quellcode:
unit mainUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DBCtrls, DB, IBDatabase, IBCustomDataSet, IBQuery,
  IBTable, Grids, DBGrids;

type
  TmainForm = class(TForm)
    IBDatabase1: TIBDatabase;
    IBTransaction1: TIBTransaction;
    DataSource1: TDataSource;
    DBMemo1: TDBMemo;
    IBQuery1: TIBQuery;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  mainForm: TmainForm;

implementation

{$R *.dfm}


procedure TmainForm.FormCreate(Sender: TObject);
begin
        IBQuery1.Open;
        IBQuery1.SQL.add('Select Memo1 from pcbeinstellungendefault where zaehler = 10');
        DataSource1.DataSet:= IBQuery1;
        MainForm.DBMemo1.DataSource := MainForm.DataSource1;
        MainForm.DBMemo1.DataField := 'MEMO1';
end;

end.

mkinzler 22. Okt 2007 21:26

Re: Data Source
 
lass mal MainForm. weg und verscheib den Code besser nach .Loaded()

DeddyH 22. Okt 2007 21:28

Re: Data Source
 
Und so?
Delphi-Quellcode:
procedure TmainForm.FormCreate(Sender: TObject);
begin
        IBQuery1.SQL.add('Select Memo1 from pcbeinstellungendefault where zaehler = 10');
        DataSource1.DataSet:= IBQuery1;
        DBMemo1.DataSource := DataSource1;
        DBMemo1.DataField := 'MEMO1';
        IBQuery1.Open;
end;

pronny31 22. Okt 2007 21:28

Re: Data Source
 
Die Fehlermeldung lautet : DataSource1 : Circular Datalinks are not allowed

mkinzler 22. Okt 2007 21:29

Re: Data Source
 
Hast du zufällig IBQuery per .DataSource auch mit DataSource1 verknüpft?

DeddyH 22. Okt 2007 21:31

Re: Data Source
 
Das wird es wohl sein.

pronny31 22. Okt 2007 21:32

Re: Data Source
 
Kommt immer wieder diese Fehlermeldung ?

DeddyH 22. Okt 2007 21:33

Re: Data Source
 
Lass mal die Zuweisung zwischen DataSource und IBQuery im Code weg.

mkinzler 22. Okt 2007 21:33

Re: Data Source
 
Trifft #17 zu? Dann entferne das.

pronny31 22. Okt 2007 21:38

Re: Data Source
 
Jetzt kommt keine Fehlermeldung mehr aber das Memo ist leer obwohl was drin stehen sollte !

mkinzler 22. Okt 2007 21:41

Re: Data Source
 
Ist das Statement vorher leer?
Delphi-Quellcode:
IBQuery1.SQL.Text := 'Select Memo1 from pcbeinstellungendefault where zaehler = 10';
Wie gesagt würde ich den Code nach .Loaded verschieben.

pronny31 23. Okt 2007 07:29

Re: Data Source
 
So es hat endlich funktioniert !!

Delphi-Quellcode:
unit mainUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DBCtrls, DB, IBDatabase, IBCustomDataSet, IBQuery,
  IBTable, Grids, DBGrids;

type
  TmainForm = class(TForm)
    IBDatabase1: TIBDatabase;
    IBTransaction1: TIBTransaction;
    IBQuery1: TIBQuery;
    DataSource1: TDataSource;
    DBMemo1: TDBMemo;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  mainForm: TmainForm;

implementation

{$R *.dfm}


procedure TmainForm.FormCreate(Sender: TObject);
var test : String ;
begin
  IBQuery1.sql.Clear;
  IBQuery1.SQL.add('Select Memo1 from pcbeinstellungendefault where zaehler = 10 ');
  IBQuery1.open;
  test := IBQuery1.FieldByName('Memo1').asString;
  DataSource1.DataSet := IBQuery1;
  DBMemo1.DataSource := DataSource1;
  DBMemo1.DataField := 'MEMO1';
end;

end.

RavenIV 23. Okt 2007 07:51

Re: Data Source
 
Das kannst DU alles aauch per ObjectInspector einstellen.
Ist dann zwar nicht mehr so übersichtlich, Du sparst Dir aber die Tipp-Arbeit und der Code bleibt übersichtlicher.

Jeder soll das so machen, wie er es für richtig hält.
Ich hab meistens ne Mischung zwischen OI und Code. Die "Verbindungen" mach ich im OI, den SQL-Code und das Open steht im Code.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:44 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