[yunqa.de] Re: ClientDataset and Primary Key

  • From: Hans-Inge Hansson <Hans-Inge.Hansson@xxxxxxxxx>
  • To: "yunqa@xxxxxxxxxxxxx" <yunqa@xxxxxxxxxxxxx>
  • Date: Wed, 24 Nov 2010 12:00:26 +0100

Hi,

Still struggeling...

I can get it to work with ONE primary key and first setting that field, 
ReadOnly := false; BUT it's not my value entered. It seems to be an 
autoincremented id. This will not work for me. I need support for more than one 
primary key and I must be able to insert my own (uniqe) values.

//Hansson



-----Ursprungligt meddelande-----
Från: Hans-Inge Hansson 
Skickat: den 23 november 2010 13:13
Till: yunqa@xxxxxxxxxxxxx
Ämne: ClientDataset and Primary Key

Hi,

How do I insert and post records in a table using a clientdataset and a table 
with primary key?

See simple example below. Must be something obvius I'm missing.

//Hansson

uses
  Classes, Controls, Forms, StdCtrls, ComCtrls, ExtCtrls, Provider, DBClient,
  DB, DISQLite3DataSet, DISQLite3Database, SysUtils;

type
  TfrmMain = class(TForm)
    DISQLite3Database: TDISQLite3Database;
    DISQLite3UniDirQuery: TDISQLite3UniDirQuery;
    ClientDataset1: TClientDataSet;
    DataSetProvider: TDataSetProvider;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  public
  end;

var
  frmMain: TfrmMain;

implementation

uses
  Dialogs, MidasLib;

{$R *.dfm}

procedure TfrmMain.Button1Click(Sender: TObject);
var
  j: Integer;
begin
  DISQLite3Database.Close;
  DeleteFile('Test.db');
  DISQLite3Database.DatabaseName := 'Test.db';
  DISQLite3Database.CreateDatabase;

 // DISQLite3Database.Execute('CREATE TABLE TEMP (A INTEGER NOT NULL,B SMALLINT 
NOT NULL, VALUE NVARCHAR(20))');    // WORKS WITH NO PRIMARY KEYS
  DISQLite3Database.Execute('CREATE TABLE TEMP (A INTEGER NOT NULL,B SMALLINT 
NOT NULL, VALUE NVARCHAR(20) , CONSTRAINT I PRIMARY KEY (A, B))'); // DON'T WORK

  ClientDataset1.Close;

  DISQLite3UniDirQuery.SelectSQL := 'SELECT * FROM TEMP';
  ClientDataset1.Open;

  ClientDataset1.Insert;
  ClientDataset1.FieldByName('A').AsString := '203921';
  ClientDataset1.FieldByName('B').AsString := '0';
  ClientDataset1.FieldByName('VALUE').AsString := '203921010';
  ClientDataset1.Post;

  ClientDataset1.ApplyUpdates(-1);
  ClientDataset1.Close;

end;
_______________________________________________
Delphi Inspiration mailing list
yunqa@xxxxxxxxxxxxx
//www.freelists.org/list/yunqa



Other related posts: