Announcement

Collapse
No announcement yet.

String mit Insert Into zu Paradoxtabelle hinzufügen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • String mit Insert Into zu Paradoxtabelle hinzufügen

    Ich entwickle eine Applikation, die Strings ausliest und in eine Tabelle einfügt. Das löse ich mit SQL und das geht auch problemlos. Jedoch gibt es Probleme, wenn der String ein solches Zeichen enthält: ´ (ASCII-Code: 146). Es gibt einen Error wegen eines Parameters. Wie kann ich trotzdem dieses Zeichen einfügen? 2x das Zeichen geht auch nicht, da wurde es zu meinem grossen Erstaunen auch 2x in die Tabelle eingefügt... Gibt es auch einen ähnlichen Befehl wie in MS SQL Server mit "Char([146])" oder so? Wäre wirklich sehr dankbar, wenn mir jemand helfen könnte.

  • #2
    Hallo,

    ich kann diesen Effekt mit Delphi 5.01 und einer Paradox-Tabelle nicht reproduzieren. Mit dem folgenden Beispiel ist es problemlos möglich, das Sonderzeichen 0146 in die Paradox-Tabelle einzufügen:

    <b>PAS</b>:
    <pre>
    unit Unit1;

    interface

    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    StdCtrls, DBTables, Grids, DBGrids, Db;

    type
    TForm1 = class(TForm)
    Database1: TDatabase;
    Table1: TTable;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    EditDaten: TEdit;
    Query1: TQuery;
    ButtonInsert: TButton;
    procedure ButtonInsertClick(Sender: TObject);
    private
    { Private-Deklarationen }
    public
    { Public-Deklarationen }
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.DFM}

    procedure TForm1.ButtonInsertClick(Sender: TObject);
    begin
    Table1.Close;
    Query1.ParamByName('Wert').Value := EditDaten.Text;
    Query1.ExecSQL;
    Table1.Open;
    end;

    end.
    </pre>
    <b>DFM</b>:
    <pre>
    object Form1: TForm1
    Left = 192
    Top = 107
    Width = 696
    Height = 480
    Caption = 'Form1'
    Color = clBtnFace
    Font.Charset = DEFAULT_CHARSET
    Font.Color = clWindowText
    Font.Height = -11
    Font.Name = 'MS Sans Serif'
    Font.Style = []
    OldCreateOrder = False
    PixelsPerInch = 96
    TextHeight = 13
    object DBGrid1: TDBGrid
    Left = 24
    Top = 56
    Width = 169
    Height = 120
    DataSource = DataSource1
    TabOrder = 0
    TitleFont.Charset = DEFAULT_CHARSET
    TitleFont.Color = clWindowText
    TitleFont.Height = -11
    TitleFont.Name = 'MS Sans Serif'
    TitleFont.Style = []
    end
    object EditDaten: TEdit
    Left = 24
    Top = 208
    Width = 121
    Height = 21
    TabOrder = 1
    Text = 'Test’ 1'
    end
    object ButtonInsert: TButton
    Left = 152
    Top = 208
    Width = 75
    Height = 25
    Caption = 'Insert'
    TabOrder = 2
    OnClick = ButtonInsertClick
    end
    object Database1: TDatabase
    Connected = True
    DatabaseName = '_Temp'
    DriverName = 'STANDARD'
    LoginPrompt = False
    Params.Strings = (
    'PATH=C:\Temp'
    'DEFAULT DRIVER=PARADOX'
    'ENABLE BCD=FALSE')
    SessionName = 'Default'
    Left = 24
    Top = 16
    end
    object Table1: TTable
    Active = True
    DatabaseName = '_Temp'
    TableName = 'TestTbl.db'
    Left = 56
    Top = 16
    end
    object DataSource1: TDataSource
    DataSet = Table1
    Left = 88
    Top = 16
    end
    object Query1: TQuery
    DatabaseName = '_Temp'
    SQL.Strings = (
    'INSERT INTO "TestTbl.db" (Wert) VALUES (:Wert)')
    Left = 24
    Top = 232
    ParamData = <
    item
    DataType = ftString
    Name = 'Wert'
    ParamType = ptInput
    end>
    end
    end
    </pre&gt

    Comment


    • #3
      Bei mir geht dieses Beispiel auch. Danke für die Hilfe. Leider half es mir nur beschränkt weiter, da immer noch irgendwo in meinem Source ein Fehler vorhanden ist. Ich habe hier nun einmal 2 Insert Into Anweisungen, die erste wird ohne Probleme ausgeführt und bei der zweiten kommt ein Error wegen eines ungültigen Parameters:

      INSERT INTO TempTbl (Interpret,Titel,Album,Jahr,Kategorie,Bitrate,Laen ge,Filesize,Pfad) VALUES(' michael moog',' that sound',' -',' 2000',' 01','128','03:39','3''507','e:\interpreten a-z\michael moog\michael moog - that sound.mp3');
      INSERT INTO TempTbl (Interpret,Titel,Album,Jahr,Kategorie,Bitrate,Laen ge,Filesize,Pfad) VALUES(' -',' Mr. Jack `Only House Music ´',' -',' -',' 01','128','03:49','3''672','e:\interpreten a-z\mr. jack\mr. jack `only house music ´.mp3');

      Die Tabelle soll folgendermassen aussehen:

      CREATE TABLE "TempTbl.db"
      (
      Nr Autoinc,
      Interpret CHAR(50),
      Titel CHAR(50),
      Album CHAR(40),
      Jahr CHAR(5),
      Kategorie CHAR(30),
      Bitrate CHAR(11),
      Laenge CHAR(7),
      Filesize CHAR(20),
      Pfad CHAR(255)
      )

      Ich führte es darauf zurück, dass die Zeichen ´ und ` den Fehler auslösten, tatsächlich, wenn ich die Zeichen ersetzte kam auch wirklich kein Fehler mehr, aber der letzte Kommentar bewies mir das Gegenteil.

      Wie unschwer festzustellen ist, soll es einen MP3-Manager geben..

      Comment


      • #4
        Hallo,

        ich verstehe nicht, warum getreu der Maxime "<i>Warum einfach, wenn's auch umständlich geht?</i>" der normale Weg über die Parameter nicht verwendet wird ;-)

        Wenn eine parametisierte INSERT-Anweisung aus irgend einem Grund nicht verwendet werden soll, kann man alternativ auch den folgenden Weg über <b>Format</b> ausprobieren:
        <pre>
        sSQL := Format('INSERT INTO (Wert1, Wert2) VALUES (%s,%s)',
        [Edit1.Text, Edit2.Text]);
        Query1.SQL := sSQL;
        Query1.ExecSQL;
        </pre>
        In diesem Fall kümmert sich die <b>Format</b>-Funktion für das Einmischen der Sonderzeichen. Außerdem gibt es da noch die Delphi-Funktion <b>QuotedStr</b>, um die Werte zu verpacken: "<i>Mit QuotedStr kann der String S in einen String in Anführungszeichen umgewandelt werden. Am Anfang und am Ende von S wird ein halbes Anführungszeichen (') hinzugefügt. Wenn innerhalb des Strings halbe Anführungszeichen enthalten sind, werden diese verdoppelt.</i>&quot

        Comment


        • #5
          Danke für ihre nützliche Hilfe, ich werde es heute mal mit ParamByName versuchen. Ich kenne die Datenbankfunktionen von Delphi eben nicht alle sehr gut, da ich SQL vorallem von MySQL in Verbindung mit PHP kenne. Aber ich bin mir sicher, dass mir diese Funktionen weiterhelfen werden, herzlichen Dank für ihre geduldigen Erklärungen

          Comment

          Working...
          X