Delphi에서 Ado로 SQL 쿼리 (삽입)를하고 있습니다. 일부 내 삽입물에는 따옴표가있는 값이 있습니다. ' 따라서 따옴표를 붙이려면 두 배로해야합니다. 그래서 함수를 만들었습니다 :문자열의 이중 인용 부호
여기 내 논리는 while 루프를 사용하는 것입니다. 왜냐하면 나는 증가 된 변수를 제어 할 수 있고 끝없는 루프를 얻지 못해 제대로 증가 할 수 있도록 내 워드의 길이를 수정할 것입니다. 그래서 문자열의 각 문자를 검사하고 있는데 따옴표 인 경우 다른 문자열을 추가합니다.
여기 코드는 내가 사용//Search if there are ', if yes we need escape them
if Pos('''', aSourceData[i,j]) <> 0 then
begin
long := 0;
While long < Length(aSourceData[i,j]) do
begin
if aSourceData[i,j][long] = '''' then
begin
//here we found a ' copy string to it and double '
aSourceData[i,j] := Copy(aSourceData[i,j], 0, long) + ''''
+ Copy(aSourceData[i,j], long+1, Length(aSourceData[i,j]));
//we modified the string so the length of the word changed
//make sure to increment correctly or it's a endless loop
long := long +2;
end;
//Increment
long := long +1 ;
//if we don't check if the last character isn't a '
//the loop will end before checking it and cause errors in sql string
if (long = Length(aSourceData[i,j])) AND (aSourceData[i,j][long] = '''') then
begin
//double the ' if found at the last position
aSourceData[i,j] := aSourceData[i,j] + '''';
break;
end;
end;
end;
이 물건은 대부분의 경우에 작동합니다. 하지만 가끔은 동일한 단어로 내 함수는 않습니다 일반적으로 너무 많은 따옴표 예를 추가
이I''m
있도록 SQL 문을 삽입 I''m
가 분명히 작동 할 때. 하지만 가끔은,이 코드 버그는 이유는 나도 몰라하며 삽입 :
I'''''''''''''m
(인용 부호의 수는 여기에 임의 ARES). idk 왜, 그것은 따옴표를 추가하는 것을 끝내지 만 idk는 때로는 잘 작동하고 때로는 버그가되고 너무 많은 따옴표를 추가합니다.
대부분의 경우 따옴표가 올바르게 중복됩니다. 하지만 가끔 idk 왜 미쳐 가고 너무 많은 따옴표를 추가합니다.
Insert into mytable values('I''m quoted','I am not');
이 작동합니다 : 나는 따옴표를 두 배로 찾아서있어
은 당신이 그들을 탈출을 두 배로 같은 테이블에 적절하게 삽입 할 수 있어야 SQL에서 발생합니다. 그러나 나는 덧붙인다.
Insert into mytable values('I'mquotes','I am not');
나는 그것이 하나의 값으로 받아 들여지고 I와 m을 구분하는 버그를 만들 것이기 때문에 버그가 생길 것이다. 그러나 나는 당신이 그것을 알고 있다고 생각한다.
어쨌든 내 doublequoting 기능이 작동하지 않습니다. 그걸 잘못 생각해 내도록 도와 주실 수 있습니까? 내 논리가 틀렸어? 고맙습니다.
내장 된 QuotedStr? – MartynA
당신은 이미 내장 방법이 진지한가? x) – user28470
매개 변수를 사용하면 .... – bummi