datasnap 클라이언트를 사용하여 삽입 할 수 없습니다.

user763539

나는 datasnap을 실험하고 있으며 (이전에 사용한 적이 없음) 이상한 문제가 발생했습니다. 내가 잘못하고 있는지 모르겠습니다. 내 양식에 Clientdataset3를 배치했습니다. 데이터 스냅 서버에 연결하는 SQLConnection1 (동일한 형식)에 연결했습니다. 또한 Clientdataset3을 삽입하려는 테이블에 연결된 서버 측의 datasetprovider (명령 텍스트 허용)에 연결했습니다. 그러나 내가 실행할 때 :

procedure TForm3.AdvGlowButton1Click(Sender: TObject);
begin
clientdataset3.CommandText:='insert into "MY_TABLE" (twit) values (:A)';
clientdataset3.Params.ParamByName('A').AsString := cxmemo1.Lines.Text;
clientdataset3.Execute;
end;

"Remote error : no such table : insert"가 표시됩니다.

내가 무엇을 잘못하고 있지 ? 데이터베이스는 XE6을 사용하는 DBX를 통한 SQLite입니다.

마틴 에이.

SELECT 문을 사용하여 CDS를 채우는 경우 맞춤형 INSERT 문을 보내는 연습을 진행할 필요가 없습니다.

전화 할 수 있어야합니다.

ClientDataSet3.Insert;
// populate fields here
ClientDataSet3.Post;

ClientDataSet3.ApplyUpdates에 대한 호출이 이어집니다.

마찬가지로 ClientDataSet3.Delete를 호출하여 DELETE를 수행 할 수 있습니다.

필요한 INSERT, DELETE 및 UPDATE 문의 구성은 CDS 제공자가 처리합니다. 그러나 나는 당신이 시도하는 방식으로 INSERT 를 할 수 없다고 제안하려는 의도 는 없습니다 -잘 작동합니다.

여기에서 INSERT에 무슨 문제가 있는지 알 수 없습니다. 대신 CREATE TABLE 등의 명령문을 포함하여 저에게 적합한 코드가 있으므로 "차이점을 찾아 낼"수 있습니다. 2014 년 6 월 4 일자 Win7 64 비트 및 v.3.8.5.0의 sqlite3.dll에서 XE6을 사용하고 있습니다.

샘플 코드는 삽입을 수행하는 세 가지 방법 (모두 확인 및 작동)을 제공합니다. 두 가지는 사용자 정의 INSERT 문을 사용하고 세 번째는 코드 (CDS1.Insert)에서 호출 할 수있는 CDS의 기본 삽입 동작을 사용하고 ' DBNavigator의 + '버튼. 기본 CDS 삽입 동작에는 특별한 처리가 필요합니다. 서버의 ID 열이 Autoinc로 정의되어 있지만 CDS 삽입을 수행하는 동안 autoinc 값을 가져 오는 것은 문제가 있으므로 코드는 여기에 설명 된 방법을 사용합니다.

http://edn.embarcadero.com/article/20847

CDS ApplyUpdates 프로세스 중에 대체되는 임시, 음수, ID 값 생성. 서버의 ID 열 값이 64 비트 정수이기 때문에 SqlQuery ID 필드의 ProviderFlags와 관련하여 링크의 에라타 섹션에서 참조한 측정 값이 필요하다는 점을 DFM에서 확인하십시오.

type
  TDataOperation = (doCreateTable, doDropTable, doInsert, doInsertUsingParams, doSelect);

TForm3 = class(TForm)
[...]
{ private declarations }
  ID : Int64;
  function NextID : Int64;
[...]
end;

implementation

{$R *.dfm}

const
  scCreateTable = 'CREATE TABLE [MATable2] ([ID] INTEGER NOT NULL '
    + #13#10 + 'PRIMARY KEY AUTOINCREMENT,  [AName] VARCHAR(20), '
    + #13#10 + '  [AMemo] MEMO)';

  scDropTable =
    'DROP TABLE [MATable2]';

  scInsert1 =
    'INSERT INTO [MATable2] (AName, AMemo) VALUES(''a'', ''A memo'')';

  scSelect =
    'SELECT * FROM [MATable2]';

  scInsertUsingParams =
    'INSERT INTO [MATable2] (AName, AMemo) VALUES(:AName, :AMemo)';

procedure TForm3.PerformTableOperation(Operation : TDataOperation);
var
  Param : TParam;
begin
  if {(Operation in [toCreate, toDrop]) and} CDS1.Active then
    CDS1.Close;
  case Operation of
    doCreateTable : begin
      CDS1.CommandText := scCreateTable;
      CDS1.Execute;
      PerformTableOperation(doSelect);
    end;
    doDropTable : begin
      CDS1.CommandText := scDropTable;
      CDS1.Execute;
    end;
    doSelect : begin
      CDS1.CommandText := scSelect;
      CDS1.Open;
    end;
    doInsert : begin
      CDS1.CommandText := scInsert1;
      CDS1.Execute;
      PerformTableOperation(doSelect);
    end;
    doInsertUsingParams : begin

      CDS1.CommandText := scInsertUsingParams;
//      CDS1.FetchParams;
      CDS1.Params.ParamByName('AName').AsString:= 'bcdef';
      CDS1.Params.ParamByName('AMemo').AsString := 'memo b';
      CDS1.Execute;
      CDS1.Params.Clear;

      PerformTableOperation(doSelect);
    end;
  end;
  if CDS1.Active then  // it won't be  after a toDrop
    CDS1.ApplyUpdates(-1);
end;


procedure TForm3.OpenConnection;
begin
 SqlConnection1.Open;
end;

procedure TForm3.btnCreateClick(Sender: TObject);
begin
  PerformTableOperation(doCreateTable);
end;

[etc ...]

procedure TForm3.btnReopenClick(Sender: TObject);
begin
  CDS1.Close;
  PerformTableOperation(doSelect);
end;

procedure TForm3.btnSelectClick(Sender: TObject);
begin
  PerformTableOperation(doSelect);
end;

procedure TForm3.CDS1AfterDelete(DataSet: TDataSet);
begin
  CDS1.ApplyUpdates(-1);
end;

procedure TForm3.CDS1AfterPost(DataSet: TDataSet);
begin
  CDS1.ApplyUpdates(-1);
end;

procedure TForm3.CDS1NewRecord(DataSet: TDataSet);
begin
  CDS1.FieldByName('ID').AsInteger := NextID;
end;

function TForm3.NextID: Int64;
begin
  Dec(ID);
  Result := ID;
end;

procedure TForm3.FormCreate(Sender: TObject);
begin
  OpenConnection;
end;

end.

그리고 내 DB 구성 요소가 어떻게 설정되었는지 추측 할 필요를 최소화하기위한 부분 DFM이 있습니다.

object Form3: TForm3
[...]
  object DBGrid1: TDBGrid
    Left = 8
    Top = 8
    Width = 456
    Height = 193
    DataSource = DataSource1
    TabOrder = 0
    TitleFont.Charset = DEFAULT_CHARSET
    TitleFont.Color = clWindowText
    TitleFont.Height = -11
    TitleFont.Name = 'Tahoma'
    TitleFont.Style = []
    Columns = <
      item
        Expanded = False
        FieldName = 'ID'
        Visible = True
      end
      item
        Expanded = False
        FieldName = 'AName'
        Visible = True
      end
      item
        Expanded = False
        FieldName = 'AMemo'
        Visible = True
      end>
  end
  [...]
  object DBNavigator1: TDBNavigator
    Left = 16
    Top = 216
    Width = 240
    Height = 25
    DataSource = DataSource1
    TabOrder = 6
  end
  object DBMemo1: TDBMemo
    Left = 207
    Top = 259
    Width = 185
    Height = 74
    DataField = 'AMemo'
    DataSource = DataSource1
    TabOrder = 7
  end
  object DBEdit1: TDBEdit
    Left = 24
    Top = 264
    Width = 121
    Height = 21
    DataField = 'AName'
    DataSource = DataSource1
    TabOrder = 8
  end
  object SQLConnection1: TSQLConnection
    ConnectionName = 'SQLITECONNECTION'
    DriverName = 'Sqlite'
    LoginPrompt = False
    Params.Strings = (
      'DriverName=Sqlite'
      'Database=D:\delphi\xe6\sqlite\matestdb.sqlite')
    Connected = True
    Left = 40
    Top = 16
  end
  object SQLQuery1: TSQLQuery
    MaxBlobSize = 1
    Params = <>
    SQL.Strings = (
      'select * from [matable2]')
    SQLConnection = SQLConnection1
    Left = 128
    Top = 16
    object SQLQuery1ID: TLargeintField
      FieldName = 'ID'
      ProviderFlags = [pfInWhere, pfInKey]
    end
    object SQLQuery1AName: TWideStringField
      FieldName = 'AName'
    end
    object SQLQuery1AMemo: TWideMemoField
      FieldName = 'AMemo'
      BlobType = ftWideMemo
      Size = 1
    end
  end
  object DataSetProvider1: TDataSetProvider
    DataSet = SQLQuery1
    Options = [poAllowCommandText, poUseQuoteChar]
    UpdateMode = upWhereKeyOnly
    Left = 216
    Top = 16
  end
  object CDS1: TClientDataSet
    Aggregates = <>
    CommandText = 'select * from MATable2'
    Params = <>
    ProviderName = 'DataSetProvider1'
    BeforeInsert = CDS1BeforeInsert
    AfterInsert = CDS1AfterInsert
    BeforePost = CDS1BeforePost
    AfterPost = CDS1AfterPost
    AfterDelete = CDS1AfterDelete
    OnNewRecord = CDS1NewRecord
    AfterApplyUpdates = CDS1AfterApplyUpdates
    Left = 288
    Top = 16
    object CDS1ID: TLargeintField
      FieldName = 'ID'
    end
    object CDS1AName: TWideStringField
      FieldName = 'AName'
    end
    object CDS1AMemo: TWideMemoField
      FieldName = 'AMemo'
      BlobType = ftWideMemo
      Size = 1
    end
  end
  object DataSource1: TDataSource
    DataSet = CDS1
    Left = 344
    Top = 16
  end
end

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

XE6 Datasnap 마법사를 사용할 수 없습니다.

분류에서Dev

Android Studio를 사용하여 이미지를 삽입 할 수 없습니다.

분류에서Dev

EXEC를 사용하여 테이블에 삽입 할 수 없습니다.

분류에서Dev

dblink를 사용하여 선택할 수 있지만 dblink를 사용하여 삽입 할 수 없습니다.

분류에서Dev

ActiveJDBC를 사용하여 HSQLDB에 개체를 삽입 할 수 없습니다.

분류에서Dev

datetimepicker c #을 사용하여 Firebird에 날짜를 삽입 할 수 없습니다.

분류에서Dev

모두 삽입을 사용하여 테이블 내부에 데이터를 삽입 할 수 없습니다.

분류에서Dev

아파치 HTTP 클라이언트 4.5 Kerberos 티켓 캐시를 사용하여 인증 할 수 없습니다

분류에서Dev

kotlin js에서 ktor 클라이언트를 사용하여 요청을 게시 할 수 없습니다.

분류에서Dev

터미널을 사용하여 Python Swagger 클라이언트를 설치할 수 없습니다.

분류에서Dev

SCRAM 인증을 사용하여 클라이언트를 kafka 서버에 연결할 수 없습니다.

분류에서Dev

Openvpn 클라이언트는 IPv6를 사용할 수 없습니다.

분류에서Dev

Insert 문을 사용하여 3200보다 큰 Oracle BLOB 데이터를 삽입 할 수 없습니다.

분류에서Dev

Django를 사용하여 데이터베이스에 데이터를 삽입 할 수 없습니다.

분류에서Dev

PHP를 사용하여 mysql 데이터베이스에 데이터를 삽입 할 수 없습니다.

분류에서Dev

(PHP, AJAX, JQ)를 사용하여 MySQL 데이터베이스에 데이터를 삽입 할 수 없습니다.

분류에서Dev

AJAX를 사용하여 mysql 데이터베이스에 데이터를 삽입 할 수 없습니다.

분류에서Dev

Unity를 사용하여 내 Web API 2 컨트롤러에 DBContext를 삽입 할 수 없습니다.

분류에서Dev

Jquery, PHP 및 AJAX를 사용하여 MySQL 테이블에 데이터를 삽입 할 수 없습니다.

분류에서Dev

PHP를 사용하여 MySQL 테이블에 데이터를 삽입 할 수 없습니다.

분류에서Dev

옵션 (textarea)을 사용하여 데이터베이스에 데이터를 삽입 할 수 없습니다.

분류에서Dev

json을 사용하여 데이터베이스에 데이터를 삽입 할 수 없습니다.

분류에서Dev

Python 2.7을 사용하여 Mysql에 유형 텍스트를 삽입 할 수 없습니다.

분류에서Dev

Oracle에서 커서를 사용하여 테이블에 레코드를 삽입 할 수 없습니다.

분류에서Dev

FLASK + SQLALCHEMY를 사용하여 Mysql에 데이터를 삽입 할 수 없습니다.

분류에서Dev

PHP에서 mysql 쿼리를 사용하여 데이터를 삽입 할 수 없습니다.

분류에서Dev

@PersistenceContext를 사용하여 RESOURCE_LOCAL 컨테이너 관리 EntityManager를 삽입 할 수 없습니다.

분류에서Dev

C ++에서 추가 모드를 사용하여 파일에 데이터를 삽입 할 수 없습니다.

분류에서Dev

IIS에서 PHP를 사용하여 MS SQL Server에 데이터를 삽입 할 수 없습니다.

Related 관련 기사

  1. 1

    XE6 Datasnap 마법사를 사용할 수 없습니다.

  2. 2

    Android Studio를 사용하여 이미지를 삽입 할 수 없습니다.

  3. 3

    EXEC를 사용하여 테이블에 삽입 할 수 없습니다.

  4. 4

    dblink를 사용하여 선택할 수 있지만 dblink를 사용하여 삽입 할 수 없습니다.

  5. 5

    ActiveJDBC를 사용하여 HSQLDB에 개체를 삽입 할 수 없습니다.

  6. 6

    datetimepicker c #을 사용하여 Firebird에 날짜를 삽입 할 수 없습니다.

  7. 7

    모두 삽입을 사용하여 테이블 내부에 데이터를 삽입 할 수 없습니다.

  8. 8

    아파치 HTTP 클라이언트 4.5 Kerberos 티켓 캐시를 사용하여 인증 할 수 없습니다

  9. 9

    kotlin js에서 ktor 클라이언트를 사용하여 요청을 게시 할 수 없습니다.

  10. 10

    터미널을 사용하여 Python Swagger 클라이언트를 설치할 수 없습니다.

  11. 11

    SCRAM 인증을 사용하여 클라이언트를 kafka 서버에 연결할 수 없습니다.

  12. 12

    Openvpn 클라이언트는 IPv6를 사용할 수 없습니다.

  13. 13

    Insert 문을 사용하여 3200보다 큰 Oracle BLOB 데이터를 삽입 할 수 없습니다.

  14. 14

    Django를 사용하여 데이터베이스에 데이터를 삽입 할 수 없습니다.

  15. 15

    PHP를 사용하여 mysql 데이터베이스에 데이터를 삽입 할 수 없습니다.

  16. 16

    (PHP, AJAX, JQ)를 사용하여 MySQL 데이터베이스에 데이터를 삽입 할 수 없습니다.

  17. 17

    AJAX를 사용하여 mysql 데이터베이스에 데이터를 삽입 할 수 없습니다.

  18. 18

    Unity를 사용하여 내 Web API 2 컨트롤러에 DBContext를 삽입 할 수 없습니다.

  19. 19

    Jquery, PHP 및 AJAX를 사용하여 MySQL 테이블에 데이터를 삽입 할 수 없습니다.

  20. 20

    PHP를 사용하여 MySQL 테이블에 데이터를 삽입 할 수 없습니다.

  21. 21

    옵션 (textarea)을 사용하여 데이터베이스에 데이터를 삽입 할 수 없습니다.

  22. 22

    json을 사용하여 데이터베이스에 데이터를 삽입 할 수 없습니다.

  23. 23

    Python 2.7을 사용하여 Mysql에 유형 텍스트를 삽입 할 수 없습니다.

  24. 24

    Oracle에서 커서를 사용하여 테이블에 레코드를 삽입 할 수 없습니다.

  25. 25

    FLASK + SQLALCHEMY를 사용하여 Mysql에 데이터를 삽입 할 수 없습니다.

  26. 26

    PHP에서 mysql 쿼리를 사용하여 데이터를 삽입 할 수 없습니다.

  27. 27

    @PersistenceContext를 사용하여 RESOURCE_LOCAL 컨테이너 관리 EntityManager를 삽입 할 수 없습니다.

  28. 28

    C ++에서 추가 모드를 사용하여 파일에 데이터를 삽입 할 수 없습니다.

  29. 29

    IIS에서 PHP를 사용하여 MS SQL Server에 데이터를 삽입 할 수 없습니다.

뜨겁다태그

보관