AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Doppelte durch einfache Hochkommas ersetzen

Ein Thema von Delbor · begonnen am 20. Sep 2019 · letzter Beitrag vom 26. Sep 2019
Antwort Antwort
Seite 1 von 2  1 2      
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#1

Doppelte durch einfache Hochkommas ersetzen

  Alt 20. Sep 2019, 11:48
Delphi-Version: 10.2 Tokyo
Hi zusammen
Von Workbench habe ich Scripts wie diese exportiert:
Delphi-Quellcode:
CREATE TABLE "PdfOfficerDB"."tblAuthor"("AuthorID" INTEGER PRIMARY KEY NOT NULL,
                                        "Name" VARCHAR(45) NOT NULL,
                                        "Vorname" VARCHAR(45) NOT NULL,
                                        "tblUser_idTblUser" INTEGER NOT NULL,
                                        CONSTRAINT "fk_tblAuthor_tblUser1"
                                          FOREIGN KEY("tblUser_idTblUser")
                                          REFERENCES "tblUser"("idTblUser"));
Und solches soll nun in sowas eingefügt werden:
Delphi-Quellcode:
function TDMLSQLiteOfficerFE.CreateTblFile: string;
  var SQLstring: String;
begin
  SQLstring := 'CREATE TABLE tblFile(FileID INTEGER PRIMARY KEY NOT NULL,'+
                                                     'FilePath" VARCHAR(100) NOT NULL,'+
                                                     'FileType" VARCHAR(5) NOT NULL,'+
                                                     'FileVersion" VARCHAR(3) NOT NULL,'+
                                                     'tblDocuments_DocuID" INTEGER NOT NULL,'+
                                                     'CONSTRAINT fk_tblFile_tblDocuments1'+
                                                       'FOREIGN KEY(tblDocuments_DocuID)'+
                                                       'REFERENCES tblDocuments(DocuID"))';
  Result := SQLString;
end;
Das heisst: einige der doppelten Hochkommas muss ich entfernen, andere durch einfache ersetzen sowie zusätzlich am Ende jeder Zeile den String abschliessen und, wenn der String in dernächsten Zeile fortgesetzt wird, ein + hinzufügen.
Ich hab das erstmal über Suchen und ersetzen versucht, aber da meckert Delphi:
Zitat:
[Content]
Suchbegriff '"' nicht gefunden

[OK]
Gebe ich nichts ein (was im Dialog sichtbar wird, kann zumindest bei mir auch als vier einzelne Hochkommas interpretiert werden), meckert Delphi:
Zitat:
[Content]
Der Suchtext darf nicht leer sein oder leer entsprechen.

[OK]
Versuche ich das mit dem Sync-Arbeitsmodus, kann ich zwar das erste Zeichen löschen, aber gleich danach wird der markierte Bereich aufgehoben.
Wie kriege ich die doppelten Hochkommas weg, ohne jedes einzeln entfernen zu müssen?

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch

Geändert von Delbor (20. Sep 2019 um 11:52 Uhr)
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.201 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Doppelte durch einfache Hochkommas ersetzen

  Alt 20. Sep 2019, 12:20
Zuerst alle " entfernen, dann MultiPaste nutzen.
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Doppelte durch einfache Hochkommas ersetzen

  Alt 20. Sep 2019, 13:02
TigerLilly
Zuerst alle " entfernen, dann MultiPaste nutzen.
Das versteh ich jetzt nur halb - die " also von Hand entfernen, okay, das ist das eine. Aber multipaste? An jeder gewünschte Stelle <Ctrl&V>?
Aber Google ist doch ein schlaues Kerlchen....

Vielen Dank für deine Antwort!

Gruss
Delbor

PS: Ich habs jettzt auch mal mit Notepad++ versucht.
suchen : ",
ersetzen durch '.

Aus
Delphi-Quellcode:
CREATE TABLE "PdfOfficerDB"."tblOrt"("OrtID" INTEGER PRIMARY KEY NOT NULL,
                                     "Ort" VARCHAR(65),
                                     "PLZ" VARCHAR(6));
wurde
Delphi-Quellcode:
CREATE TABLE 'PdfOfficerDB"."tblOrt"("OrtID' INTEGER PRIMARY KEY NOT NULL,
                                     'Ort' VARCHAR(65),
                                     'PLZ' VARCHAR(6));
Ob da mit den beiden Möglichkeiten (Notepad++ oder Multipaste wirklich Zeit und Tipparbeit eingespart würde, bin ch mir nicht sicher. Das Ergebnis von Notepad++ sähe eventuell besser aus, wenn die nicht benötigten Tabellennamen vorher entfernt würden...
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch

Geändert von Delbor (20. Sep 2019 um 13:37 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Doppelte durch einfache Hochkommas ersetzen

  Alt 20. Sep 2019, 13:31
Ich hoffe das Beispiel
Delphi-Quellcode:
...
'FilePath" VARCHAR(100) NOT NULL,'+
'FileType" VARCHAR(5) NOT NULL,'+
'FileVersion" VARCHAR(3) NOT NULL,'+
'tblDocuments_DocuID" INTEGER NOT NULL,'+
...
war noch nicht fertig, das könnte doch in die Hose gehen!

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Doppelte durch einfache Hochkommas ersetzen

  Alt 20. Sep 2019, 13:44
Hi p80286
Ich hoffe das Beispiel
Delphi-Quellcode:
...
'FilePath" VARCHAR(100) NOT NULL,'+
'FileType" VARCHAR(5) NOT NULL,'+
'FileVersion" VARCHAR(3) NOT NULL,'+
'tblDocuments_DocuID" INTEGER NOT NULL,'+
...
war noch nicht fertig, das könnte doch in die Hose gehen!

Gruß
K-H
Das sollte auch nur das Ergebnis in Notepad++ zeigen, das so natürlich nicht brauchbar ist. Es würde Nachbearbeitung nötig, und da stellt sich dann die Frage, ob damit irgendwas gegenüber der händischen Anpassung gewonnen wurde.

Effizienter würde das eventuell durch ein eigenes kleines Tool gelöst...

Gruss
Delbor

PS: Im Nachinein sehe ich: das war eines der Statements, die ich zuvor händisch angepasst habe - dabei gingen dann einige Sachen vergessen.
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch

Geändert von Delbor (20. Sep 2019 um 13:50 Uhr)
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
969 Beiträge
 
Delphi 6 Professional
 
#6

AW: Doppelte durch einfache Hochkommas ersetzen

  Alt 20. Sep 2019, 14:24
Hmmm..

Wenn ich das richtig sehe, soll aus:

Code:
CREATE TABLE "PdfOfficerDB"."tblAuthor"("AuthorID" INTEGER PRIMARY KEY NOT NULL,
                                        "Name" VARCHAR(45) NOT NULL,
                                        "Vorname" VARCHAR(45) NOT NULL,
                                        "tblUser_idTblUser" INTEGER NOT NULL,
                                        CONSTRAINT "fk_tblAuthor_tblUser1"
                                          FOREIGN KEY("tblUser_idTblUser")
                                          REFERENCES "tblUser"("idTblUser"));
folgendes werden:
Code:
'CREATE TABLE PdfOfficerDB.tblAuthor(AuthorID INTEGER PRIMARY KEY NOT NULL, '+
                                        'Name VARCHAR(45) NOT NULL, '+
                                        'Vorname VARCHAR(45) NOT NULL, '+
                                        'tblUser_idTblUser INTEGER NOT NULL, '+
                                        'CONSTRAINT fk_tblAuthor_tblUser1 '+
                                          'FOREIGN KEY(tblUser_idTblUser) '+
                                          'REFERENCES tblUser(idTblUser)); ';
Wenn das richtig ist, dann würde es z.B. so gehen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i : integer;
  sl : TStringList;
  l : integer;
begin
  sl := TStringList.Create;
  try
    // Alle " löschen
    sl.Text := Trim(StringReplace(Memo1.Text,'"','',[rfReplaceAll]));
    for i := 0 to sl.Count-1 do begin
      // Anzahl führende Leerzeichen ermitteln
      l := Length(sl[i]) - Length(Trim(sl[i]));
      // Führende Leerzeichen + in Anführungszeichen setzen (mit Trennleerzeichen je Zeilenende)
      sl[i] := StringOfChar(' ',l) + QuotedStr(Trim(sl[i])+ ' ');
      // '+' bei allen Zeilen, außer der letzten, anhängen
      if i < sl.Count-1 then
        sl[i] := sl[i] +'+'
      else
        // ';' bei letzter Zeilen anhängen
        sl[i] := sl[i] +';';
    end;
    Memo2.Text := sl.Text;
  finally
    sl.Free;
  end;
end;
(Ja ich Verwende Delphi 6 Pro und will NICHT wechseln!)
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Doppelte durch einfache Hochkommas ersetzen

  Alt 20. Sep 2019, 14:52
Hi HolgerX

Danke für dein Codeschnipsel!

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.442 Beiträge
 
Delphi 12 Athens
 
#8

AW: Doppelte durch einfache Hochkommas ersetzen

  Alt 20. Sep 2019, 15:27
Wieso können eigentlich die doppelten Anführungszeichen nicht bleiben? Das sind doch nur gequotete Identifier und die sollten auch im Delphi-Code funktionieren.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Doppelte durch einfache Hochkommas ersetzen

  Alt 20. Sep 2019, 15:39
Hi Uwe Raabe

Wieso können eigentlich die doppelten Anführungszeichen nicht bleiben? Das sind doch nur gequotete Identifier und die sollten auch im Delphi-Code funktionieren.
Ohne es jetzt wirklich zu wissen: Der SQLString dürfte doch letztlich vom DBMS verarbeitet werden, und nicht von Delphi. So zumindest kann ich mir das erklären.

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.442 Beiträge
 
Delphi 12 Athens
 
#10

AW: Doppelte durch einfache Hochkommas ersetzen

  Alt 20. Sep 2019, 15:49
Der SQLString dürfte doch letztlich vom DBMS verarbeitet werden, und nicht von Delphi. So zumindest kann ich mir das erklären.
Genau das wollte ich ja mit meinem Statement ausdrücken! Delphi ist es egal, ob du die SQL-Identifier quotest. Wenn der SQL-String in der Workbench so funktioniert, dann sollte er es auch aus dem Delphi-Code tun.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:41 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