Entwickler-Ecke
Datenbanken - ADT: Zulange Zeile...?
Aya - Mi 18.06.03 11:59
Titel: ADT: Zulange Zeile...?
Hi,
ich hab ein riesen problem mit dem Advance Database SQL System...
wenn ich mit:
Delphi-Quelltext
1:
| Query.SQL.Text:='UPDATE Bla SET Mem='''xxxxxxxx...xxxxxxxx''' WHERE ID=11 |
mache, und für xxx einen Text mit etwas mehr als 1000 Zeichen einsetze, bekomme ich folgende Fehlermeldung:
Am Text inhalt liegt es nicht, ich hab es auch schon mit 1000 X'en versucht, klappt genausowenig... (Der FeldTyp in der DB ist Memo)
Hat irgendwer ne ahnung woran das liegt???
Au'revoir,
Aya~
CenBells - Mi 18.06.03 12:03
Hallo,
ja, das problem ist bekannt. Du kannst in einer normalen Updateanweisung halt nicht beliebig viele Zeichen übergeben. Meistens steht das auch irgendwo, wieviele zeichen das sind....
Als ein recht gutes workaraound empfiehlt sich eine stored procedure..
Gruß
Ken
Aya - Mi 18.06.03 12:08
Hi,
| CenBells hat folgendes geschrieben: |
| Als ein recht gutes workaraound empfiehlt sich eine stored procedure.. |
Was ist das???
Aber es muß doch gehen das man in ne DB mehr als 1000 Zeichen packt... :roll:
Au'revoir,
Aya~
CenBells - Mi 18.06.03 12:26
| Aya hat folgendes geschrieben: |
Hi,
| CenBells hat folgendes geschrieben: | | Als ein recht gutes workaraound empfiehlt sich eine stored procedure.. |
Was ist das???
Aber es muß doch gehen das man in ne DB mehr als 1000 Zeichen packt... :roll:
Au'revoir,
Aya~ |
Klar geht das. Du kannst nen haufen zeichen in eine spalte eines records packen. Das problem ist nicht daß die DB das nicht kann, sondern, daß du das updatestatement nicht beliebig lang gestalten kannst. Mach es wie gesagt lieber mit einer Stored Procedure (Eine Prozedur die in der Datenbank angelegt wird). Da kannst du die parameter übergabe solang wie du sie benötigst machen.
Gruß
Ken
Aya - Mi 18.06.03 12:30
Hi,
ich hab ehrlichgesagt noch nich sehr viel ahnung von Datenbanken... = hab Keine ahnung was eine Stored Procedure is (Ok, nu schon nachdem du es erklärt hast *g*) bzw wie ich sowas mache... *guckt hilflos*
Au'revoir,
Aya~
PS: Bitte sei so lieb und antworte so schnell wie möglich.. ist super dringend :?
CenBells - Mi 18.06.03 12:37
also... ich versuche es
eine stored procedure legst du wie gesagt direkt in der Datenbank an. Der BEfehl ist Create Procedure
Such mal danach in der Hilfe zu deiner DB.
Und der Code, der in der stored procedure ausgeführt wird, ist das update statement, welches Du eh in deinem Prog ausführst. Allerdings benötigst du 2 parameter für die stored Procedure und dann kannst du aus deinem Programm mittels komponenten wie TStoredProcedure die Prozedur ausführen.
Gruß
Ken
Aya - Mi 18.06.03 12:51
Hi,
mh... ok... aber der will da beim CREATE PROCEDURE am ende einen Dateinamen von einer *.AEP Datei in welcher die Procedure drin ist... wie erstelle ich die datei???
Au'revoir,
Aya~
Aya - Mi 18.06.03 12:54
huhu nochma ;)
ok.. hab nun sone Stored Procedure angelegt.. aber was bringt mir das jetzt???
Ich hab als Input Name "Text" und als Typ "Memo" genommen...
und wie mach ich das jetzt, das er da was in die DB schreibt??? *guckt verwirrt*
Au'revoir,
Aya~
CenBells - Mi 18.06.03 13:22
ok, du musst in der procedure ganz normal ein SQL Update Statement ausführen. Du wirst auch noch einen identifier übergeben müssen
Delphi-Quelltext
1: 2: 3: 4: 5:
| begin Update Bla SET Mem = :Text WHERE identifier = :uebergebeneridentifier; end; |
Gruß
Ken
Moderiert von
Marc: Code-Tag durch Delphi-Tag ersetzt.
Aya - Mi 18.06.03 13:32
Hi,
mh... ich glaub ich bin blöd... :roll:
Kannst du mir mal erklären was genau ich in der StoredProcedure machen muß???
Ich hab das bisjetzt soweit:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93:
| function MyProcedure( ulConnectionID: UNSIGNED32; pusUserName: PChar; pucPassword: PChar; pucProcName: PChar; ulRecNum: UNSIGNED32; pucTable1: PChar; pucTable2: PChar ): UNSIGNED32; {$IFDEF WIN32}stdcall;{$ENDIF}{$IFDEF LINUX}cdecl;{$ENDIF} var DM1 : TDM1; strTable1 : string; strTable2 : string; Texte: Array[1..7] of String; begin
try Result := AE_SUCCESS;
DM1 := TDM1( AEPSessionMgr.GetDM( ulConnectionID ) );
{$IFDEF LINUX} strTable1 := DosPathToUnixPath( StrPas( pucTable1 ) ); strTable2 := DosPathToUnixPath( StrPas( pucTable2 ) ); {$ELSE} {$IFDEF ADSDELPHI6_OR_NEWER} strTable1 := UnixPathToDosPath( StrPas( pucTable1 ) ); strTable2 := UnixPathToDosPath( StrPas( pucTable2 ) ); {$ELSE} strTable1 := StrPas( pucTable1 ); strTable2 := StrPas( pucTable2 ); {$ENDIF} {$ENDIF}
DM1.ParamsConn.Disconnect; if ( Length( strTable1 ) > 0 ) then DM1.ParamsConn.ConnectPath := ExtractFileDir( strTable1 ) else DM1.ParamsConn.ConnectPath := ExtractFileDir( strTable2 );
with DM1 do begin tblInput.tablename := ExtractFileName( strTable1 ); tblOutput.tablename := ExtractFileName( strTable2 );
Texte[1]:=tblInput.FieldByName('Text1').AsString; Texte[2]:=tblInput.FieldByName('Text2').AsString; Texte[3]:=tblInput.FieldByName('Text3').AsString; Texte[4]:=tblInput.FieldByName('Text4').AsString; Texte[5]:=tblInput.FieldByName('Text5').AsString; Texte[6]:=tblInput.FieldByName('Text6').AsString; Texte[7]:=tblInput.FieldByName('Text7').AsString;
tblTexte.FieldByName('T1').Value:=Texte[1]; tblTexte.FieldByName('T2').Value:=Texte[2]; tblTexte.FieldByName('T3').Value:=Texte[3]; tblTexte.FieldByName('T4').Value:=Texte[4]; tblTexte.FieldByName('T5').Value:=Texte[5]; tblTexte.FieldByName('T6').Value:=Texte[6]; tblTexte.FieldByName('T7').Value:=Texte[7];
end;
except on E : EADSDatabaseError do Result := E.ACEErrorCode; on E : Exception do Result := 1; end;
end; |
tblTexte ist meine DB wo die 7 Texte reinsollen...
Nur woher weiß der jetzt in welcher Zeile das ganze passieren soll etc bla bla... hab keine ahnung *seufzt*
Au'revoir,
Aya~
Aya - Mi 18.06.03 14:30
Hat sich erledigt...
hab es hinbekommen ;)
Delphi-Quelltext
1: 2: 3:
| Query.SQL.Text:='UPDATE test SET Memo=:T1 WHERE ID=1'; Query.ParamByName('T1').Value:=Memo.Text; Query.ExecSQL; |
Au'revoir,
Aya~
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!