"zwykły tekst" rozumiem przez tekst bez znaków specjalnych ktore "coś" znaczą w kodzie sql - średnik poprzedziłem ukośnikiem gdyż sam średnik jest zakończeniem polecenia sql. Sprawdzałem z poziomu Interactive SQL, że znaki specjalne poprzedzone \ nie generują błędów - apostrof jest wyjątkiem dlatego zamieniłem go na " który można swobodnie wstawić w sql jako tekst. Apostrof nawet poprzedzony ukośnikiem będzie generował błąd.
Dla przykładu:
- Kod: Zaznacz cały
AnsiString tresc = "cos ; cos";
AnsiString zm_sql = "INSERT INTO TABELA VALUES(1,'+tresc+');";
IBQuery1->Active=false;
IBQuery1->SQL->Text=zm_sql;
IBQuery1->Active=true;
Uprzedzam ewentualne pytanie - w wersji 2009 borlanda taka sekwencja daje ten sam efekt co wywołanie ExecSQL (czy jakos tak... z tej drugiej metody nie korzystam wiec nie pamietam dokladnie jak sie pisze).
Kod który wstawiłem wypluje błąd ponieważ średnik spowoduje, że finalne zapytanie będzie miało forme:
- Kod: Zaznacz cały
INSERT INTO TABELA VALUES (1,'cos ; cos');
co jest błędem.
Natomiast jeśli zmodyfikujemy kod do postaci:
- Kod: Zaznacz cały
AnsiString tresc = "cos \; cos";
AnsiString zm_sql = "INSERT INTO TABELA VALUES(1,'+tresc+');";
IBQuery1->Active=false;
IBQuery1->SQL->Text=zm_sql;
IBQuery1->Active=true;
finalne zapytanie SQL będzie miało postać:
- Kod: Zaznacz cały
INSERT INTO TABELA VALUES (1,'cos \; cos');
a taki kod w interacive SQL jest wykonywany prawidłowo - analogicznie cudzysłów.
Jeżeli zmienna tresc="cos ; cos" baza zwróci błąd ale "cos \; cos" już nie.
Mam to sprawdzone gdyż takie ciągi znaków wstawiałem do bazy i nie generowały błędów. Cudzysłów zamiast średnika wchodzi bez problemu ( z tą różnicą, że w kodzie C++ musi być poprzedzony \).
Nie jestem pewien czy jakieś inne znaki nie powodują błędów np. <, # itd ale apostrof, średnik i cudzysłów sprawdzałem i używałem z ukośnikiem i było ok.
Informacja błędu sugeruje, że index XSQLDA jest poza zakresem (jeśli dobrze przetłumaczyłem) ale nie mogę się doszukać informacji co to za indeks i za co on jest odpowiedzialny - w sieci widziałem pytania o ten indeks i o ten sam komunikat niestety na pytaniach się kończyło