Für mein Projekt habe ich eine Kopier Funktion erstellt. Klappt inzwischen auch soweit. Jedoch würde ich gerne, wie bisher im Projekt auf
"prepared statements" setzten.
Ich nutzte eine MariaDB(mysql57conn) als Datenbank.
Ich habe natürlich auch gesucht im Internet, jedoch scheinen das viele so zu machen.
Code: Alles auswählen
 
procedure TPLNoteManager2.AddNote2(Items: TObjectList; const aTargetDirectory: Integer);
var
  str:String;
  TempID,i:Integer;
  DirectoryItem:TPLNoteManager2DirectoryItem;
  NoteItem:TPLNoteManager2NoteItem;
begin
  str:='INSERT INTO NoteTable ('+
         'DirectoryID, ' +
         'Title, ' +
         'Text, ' +
         'CreateDateTime, ' +
         'LastReadDateTime, ' +
         'LastwriteDateTime, ' +
         'ReadCount, ' +
         'WriteCount, ' +
         'UserID, ' +
         'EncryptByUserPassword'+
        ') ' +
        'VALUES ';
 
  MariaDB.Query2.Prepare;
 
  for i:=0 to Items.Count-1 do begin
    NoteItem:=Items[i] as TPLNoteManager2NoteItem;
    str:=str+'('+
          IntToStr(NoteItem.DirectoryID)+','+
 
          QuotedStr(NoteItem.Title)+','+
          QuotedStr(NoteItem.Text)+','+
 
          QuotedStr(DateTimeToStr(NOW,DefaultSQLFormatSettings))+','+
          QuotedStr('0')+','+
          QuotedStr('0')+','+
 
//          QuotedStr(DateTimeToStr(NoteItem.LastReadDateTime,DefaultSQLFormatSettings))+','+
//          QuotedStr(DateTimeToStr(NoteItem.LastWriteDateTime,DefaultSQLFormatSettings))+','+
 
          IntToStr(NoteItem.ReadCount)+','+
          IntToStr(NoteItem.WriteCount)+','+
 
          IntToStr(NoteItem.UserID)+','+
          BoolToStr(NoteItem.EncryptByUserPassword)+''+
        ')';
    if i < Items.Count-1 then
      str:=str+',';
  end;
 
  writeln();
  writeln(str);
  writeln();
  MariaDB.Query.SQL.Text:=str;
  MariaDB.Query.ExecSQL;
  MariaDB.Query.Close;
  MariaDB.ATransaction.Commit;
 
  DirectoryItem:=FindDirectoryByDirectoryID(aTargetDirectory,DirectoryItemlist);
  if Assigned(DirectoryItem) then begin
    if not DirectoryItem.Used then begin
      DirectoryItem.Used:=UpdatetUsedDirectory(DirectoryItem.DirectoryID);
    end;
  end;
end; // TPLNoteManager2.AddNote2   
 Code: Alles auswählen
 
var
  str:String;
  TempID:Integer;
  DirectoryItem:TPLNoteManager2DirectoryItem;
begin
  str:='INSERT INTO NoteTable (' +
         'NoteID, ' +
         'DirectoryID, ' +
         'Title, ' +
         'Text, ' +
         'CreateDateTime, ' +
         'LastReadDateTime, ' +
         'LastwriteDateTime, ' +
         'ReadCount, ' +
         'WriteCount, ' +
         'UserID, ' +
         'EncryptByUserPassword' +
       ') VALUES (' +
       ':NoteID, ' +
       ':DirectoryID, ' +
       ':Title, ' +
       ':Text, ' +
       ':CreateDateTime, ' +
       ':LastReadDateTime, ' +
       ':LastwriteDateTime, ' +
       ':ReadCount, ' +
       ':WriteCount, ' +
       ':UserID, ' +
       ':EncryptByUserPassword' +
       ');';
 
  MariaDB.Query.SQL.Text:=str;
 
  MariaDB.Query.ParamByName('NoteID').AsInteger:=aNote.NoteID;
  MariaDB.Query.ParamByName('DirectoryID').AsInteger:=aNote.DirectoryID;
  MariaDB.Query.ParamByName('Title').AsString:=aNote.Title;
  MariaDB.Query.ParamByName('Text').AsString:=aNote.Text;
  MariaDB.Query.ParamByName('CreateDateTime').AsDateTime:=aNote.CreateDateTime;
  MariaDB.Query.ParamByName('LastReadDateTime').AsDateTime:=aNote.LastReadDateTime;
  MariaDB.Query.ParamByName('LastwriteDateTime').AsDateTime:=aNote.LastWriteDateTime;
  MariaDB.Query.ParamByName('ReadCount').AsInteger:=aNote.ReadCount;
  MariaDB.Query.ParamByName('WriteCount').AsInteger:=aNote.WriteCount;
  MariaDB.Query.ParamByName('UserID').AsInteger:=aNote.UserID;
  MariaDB.Query.ParamByName('EncryptByUserPassword').AsBoolean:=aNote.EncryptByUserPassword;
  MariaDB.Query.ExecSQL;
 
  // Die NoteID gleich ändern. Das geht aber erst nach dem Hinzufügen. Da voher die ID nicht bekannt ist.
  aNote.NoteID:=MariaDB.AConnection.GetInsertID;
  MariaDB.ATransaction.Commit;
 
  DirectoryItem:=FindDirectoryByDirectoryID(aNote.DirectoryID,DirectoryItemlist);
  if Assigned(DirectoryItem) then begin
    if not DirectoryItem.Used then begin
      DirectoryItem.Used:=UpdatetUsedDirectory(DirectoryItem.DirectoryID);
    end;
  end;            
 
 Verein
Verein 
 Links
Links Suche
Suche