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.
Announcement
Collapse
No announcement yet.
String mit Insert Into zu Paradoxtabelle hinzufügen
Collapse
X
-
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>
-
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
-
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>"
Comment
-
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
Comment