Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Mehrzeiligen Text zuweisen incl. ' (https://www.delphipraxis.net/205533-mehrzeiligen-text-zuweisen-incl.html)

norwegen60 21. Sep 2020 07:57

Mehrzeiligen Text zuweisen incl. '
 
In C# gibt es die Möglichkeit, mehrzeiligen Text so zuzuweisen
Code:
            this.AddCmd(@"
            if not exists(select * from information_schema.tables where table_name = 'Tabelle1')
            begin
              create table Tabelle1
              (ID int not null Identity (1,1),
              Datum Datetime,
              Result varchar(15),
              Info varchar(50) null)
              on [primary]
            end
         ");
Diese Zuweisung hat den Vorteil, dass ich den kompletten Textblock kopieren und 1:1 im MsSQL-Manager testen kann

In Delphi kenn ich nur so was
Delphi-Quellcode:
quQuery.SQL.Text := 'if not exists(select * from information_schema.tables where table_name = ''Tabelle1'')';
quQuery.SQL.Add('begin');
quQuery.SQL.Add(' create table Tabelle1');
quQuery.SQL.Add(' (ID int not null Identity (1,1),');
quQuery.SQL.Add(' Datum Datetime,');
quQuery.SQL.Add(' Result varchar(15),');
quQuery.SQL.Add(' Info varchar(50) null)');
quQuery.SQL.Add(' on [primary]');
quQuery.SQL.Add('end');
Entsprechend mühsam ist es den eigentlich relevanten SQL-Text (der auch umfangreicher sein kann) im SQL-Manager zu testen. Zumal auch die doppelten ''Tabelle1'' bei Strings geändert werden müssen.

Hat jemand eine Idee, wie ich den Text ähnlich wie bei C# als ein Block zuweisen kann?

Direkt im quQuery-Editor kann ich es nicht zuweisen, da es viele solcher SQL's hintereinander geben kann.

Vielen Dank im Voraus

Uwe Raabe 21. Sep 2020 08:12

AW: Mehrzeiligen Text zuweisen incl. '
 
Mehrzeilige String-Konstanten gibt es in Delphi leider nicht.

haentschman 21. Sep 2020 08:30

AW: Mehrzeiligen Text zuweisen incl. '
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin...:P
eine andere Möglichkeit wäre das speichern der SQL außerhalb vom QT...in Ressourcen. https://www.delphipraxis.net/49505-s...einbinden.html

Tool:
PS: Ich liebe es. :drunken: https://www.delphipraxis.net/190316-...e-creator.html

Vorteile:
* Das SQL ist eine Datei, die im bevorzugten Editor testbar ist. :thumb: (Parameter müßten ggf. werttechnisch ergänzt werden :wink:)
* Alle SQL an einem Platz im Dateisystem und nicht über den QT oder DPR verteilt.

QT:
Delphi-Quellcode:
function TDatabaseBase.GetSQLByName(SQLName: string): string;
var
  SQLStream: TResourceStream;
  SQLStrings: TStringList;
  SQLStringsDecrypt: TStringList;
begin
  Result := '';
  SQLStrings := TStringList.Create;
  try
    SQLStringsDecrypt := TStringList.Create;
    try
      SQLStream := TResourceStream.Create(HInstance, SQLName, PWideChar(conDatabaseResourceGroupString)); // MSSQL2012 z.B. entsprechend des Ressourcennamens den du vergeben hast
      try
        try
          SQLStrings.LoadFromStream(SQLStream);
          SQLStringsDecrypt.Text := TToolsCrypt.Decrypt(SQLStrings.Text, conKey); // nur bei verschlüsseltem SQL nötig
          Result := SQLStringsDecrypt.Text;
        except
          Result := '';
        end;
      finally
        SQLStream.Free;
      end;
    finally
      SQLStringsDecrypt.Free;
    end;
  finally
    SQLStrings.Free;
  end;
end;
...
procedure TDatabase.FillList(List: TBlubbFieldList; TableName: string);
var
  I: Integer;
  Qry: TFDQuery;
  Field: TBlubbField;
begin
  Qry := CreateQuery;
  try
    Qry.SQL.Text := Format(GetSQLByName('TABLE_FIELDLIST'), [TableName]);
    Qry.Open;
    if not Qry.Eof then
    begin
      List.Clear;
      for I := 0 to Qry.Fields.Count - 1 do
      begin
        Field := TBlubbField.Create;
        Field.FieldIndex := I;
        Field.FieldName := Qry.Fields[I].FieldName;
        Field.Fieldype := Qry.Fields[I].DataType;
        List.Add(Field);
      end;
    end;
  finally
    Qry.Free;
  end;
end;

norwegen60 21. Sep 2020 08:34

AW: Mehrzeiligen Text zuweisen incl. '
 
Gerade hatte ich geschrieben:

Das habe ich befürchtet. Ich hatte gehofft, es gibt irgendeinen Trick.

Ich könnte es aus einen Textfile auslesen, aber das wäre bei den Kunden verpönt. Das gilt natürlich auch für html. Es wäre vom Kunden änderbar

stifflersmom 21. Sep 2020 08:47

AW: Mehrzeiligen Text zuweisen incl. '
 
Dann wäre haentschmans Ressourcenlösung genau das richtige für Dich

haentschman 21. Sep 2020 08:48

AW: Mehrzeiligen Text zuweisen incl. '
 
Zitat:

Ich könnte es aus einen Textfile auslesen, aber das wäre bei den Kunden verpönt.
Verstehe ich. Das versteht sich aus Gründen der SQL Injection! :warn: Die SQL sind bei Ressourcen einkompiliert. :zwinker:

norwegen60 21. Sep 2020 09:10

AW: Mehrzeiligen Text zuweisen incl. '
 
OK, zu schnell geantwortet. Ich hatte nicht bedacht, dass Ressourcen ja kompiliert sind. Damit wäre es eine Option.

Rollo62 21. Sep 2020 09:24

AW: Mehrzeiligen Text zuweisen incl. '
 
Delphi-Quellcode:
     'create table Tabelle1 '//
    +'(ID int not null Identity (1,1), '//
    +'Datum Datetime, '//
    +'Result varchar(15), '//
    +'Info varchar(50) null) '//
    +'on [primary] '//
Sowas wäre vielleicht noch am wenigsten schmerzhaft, man kann die überflüssigen
+' und '// leichter finden und rauslöschen.

Delphi.Narium 21. Sep 2020 09:31

AW: Mehrzeiligen Text zuweisen incl. '
 
Tool schreiben:

Ein Memo, in das Du das getestete SQL per Copy&Paste reinpappst.
Zweites Memo für die Ausgabe.
Ein Edit für den Namen der Query im Quelltext.
Eine Button für 'ne Routine (sinngemäß) dieser Art:
Delphi-Quellcode:
Memo1.Lines.Clear;
Memo1.PasteFromClipboard;
Memo2.Lines.Clear;
Memo2.Lines.Add(Format('%s.SQL.Clear;',[edQueryName.Text]));
for i := 0 to Memo1.Lines.Count - 1 do Memo2.Lines.Add(Format('%s.SQL.Add(%s);',[edQueryName.Text,QuotedStr(Memo1.Lines[i])]));
Memo2.SelectAll;
Memo2.CopyToClipboard;
Ergebnis per Copy&Paste an die passende Stelle im Quelltext einfügen.

Hab' sowas vor Jahren mal für 'nen ähnlichen "Bedarf" in 'ner vollkommen anderen Entwicklungsumgebung benötigt. Hat wunderbar geklappt und sehr viel Schreiberei erspart.

haentschman 21. Sep 2020 09:35

AW: Mehrzeiligen Text zuweisen incl. '
 
Zitat:

Ein Memo, in das Du das getestete SQL per Copy&Paste reinpappst.
...es geht eher um das testen des SQL in dem DB Editor, was im QT schon mit .Add( steht...quasi umgekehrt. :zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:14 Uhr.
Seite 1 von 3  1 23      

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