Problème Violation d'accès drag&drop entre 2 tableaux
Flash11
Messages postés54Date d'inscriptionmardi 27 novembre 2007StatutMembreDernière intervention14 août 2011
-
11 août 2011 à 20:46
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 2021
-
24 août 2011 à 17:14
Bonjour ,
Je vais tenter d'être le plus clair et je remercie d'avance tout ceux qui vont m'aider.
Voila j'ai un programme composé de :
-2 TDBGrid
-2 Tquery
-2 Datasource
Un TDBGrid est une table rempli et la 2ème TDBGrid est une table avec la même architecture vide.
Je souhaiterais par le biais d'un drag & drop pouvoir envoyer une ligne du TDBGrid1 dans le 2.
J'ai beaucoup cherché sur différents forums et tutorial mais je suis a court d'idée c'est pourquoi je viens vous demander de l'aide.
J'ai eu un problème qui me disait Query2:Impossible de lire surr ensemble de données en lecture seule.
Désormais mon erreur est une violation d'accès lorsque j'opère le drag & drop.
Voici mon code :
unit projetgarde;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBTables, ExtCtrls, DBCtrls, Grids, DBGrids, RpDefine, RpRave,
RpCon, RpConDS, StdCtrls, Menus, Mask, IBCustomDataSet, IBUpdateSQL;
type
TForm1 = class(TForm)
DBGrid1: TDBGrid;
DBGrid2: TDBGrid;
Query1: TQuery;
DataSource1: TDataSource;
DataSource2: TDataSource;
Query2: TQuery;
procedure FormCreate(Sender: TObject);
procedure DBGrid2CellClick(Column: TColumn);
procedure DBGrid1DragDrop(Sender, Source: TObject; X, Y: Integer);
procedure DBGrid1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure DBGrid1StartDrag(Sender: TObject; var DragObject: TDragObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;
var
Form1: TForm1;
DragRecords: array of variant;
ASource, DestSource: TDataSource;
implementation
{$R *.dfm}
procedure TForm1.DBGrid1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
I: integer;
begin
DestSource := TDBGrid(sender).DataSource;
if ASource = DestSource then exit;
try
TDBGrid(sender).ReadOnly := false;
TDBGrid(sender).DataSource.DataSet.Insert;
for I := 0 to TDBGrid(sender).FieldCount - 1 do
TDBGrid(sender).Fields[I].Value := DragRecords[I];
TDBGrid(sender).DataSource.DataSet.Post;
finally
TDBGrid(sender).ReadOnly := true;
TDBGrid(sender).DragMode := dmManual;
end;
end;
procedure TForm1.DBGrid1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := (Source is TDBGrid) and (TDBgrid(sender).DataSource <> nil);
end;
procedure TForm1.DBGrid1StartDrag(Sender: TObject; var DragObject: TDragObject);
var
I: Integer;
begin
ASource := TDBGrid(sender).DataSource;
SetLength(DragRecords, TDBGrid(sender).FieldCount);
for I := 0 to TDBGrid(sender).FieldCount - 1 do
DragRecords[I] := TDBGrid(sender).Fields[i].Value;
end;
procedure TForm1.DBGrid2CellClick(Column: TColumn);
begin
DBGrid2.BeginDrag(true);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Query1.Open;
Query2.Open;
end;
end.
Merci à vous pour votre aide, Flash11.
A voir également:
Problème Violation d'accès drag&drop entre 2 tableaux