powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Строку в БД.
16 сообщений из 16, страница 1 из 1
Строку в БД.
    #33723836
AbelKasum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
День добрый.

Чё-то я не догоняю.
При попытке обновить строковое поле через delphi, появилась проблема.
UPDATE [TableName1] SET ColumnC = eExpression1 ...
где eExpression1= г. Такой-то
Как передать eExpression1.
Если просто eExpression1, то ошибка.
Если просто "eExpression1", то ошибка когда:
eExpression1=г. "Такой-то.
Если просто 'eExpression1', то ошибка когда:
eExpression1=г. Такой'то.
Если просто [eExpression1], то ошибка когда:
eExpression1=г. Такой[то.

Чё делать? Как дать занть ФПРО что это строка.
...
Рейтинг: 0 / 0
Строку в БД.
    #33723907
Александр Кордюм
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А так Query.sql.text:='UPDATE TableName1 SET ColumnC ='+
''''+eExpression1+'''';
Но если в eExpression1 есть кавычка, то ее надо удвоить.
...
Рейтинг: 0 / 0
Строку в БД.
    #33723963
AbelKasum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр КордюмА так Query.sql.text:='UPDATE TableName1 SET ColumnC ='+
''''+eExpression1+'''';
Но если в eExpression1 есть кавычка, то ее надо удвоить.

Вроде можно. Ща проверим.
...
Рейтинг: 0 / 0
Строку в БД.
    #33723982
AbelKasum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр КордюмА так Query.sql.text:='UPDATE TableName1 SET ColumnC ='+
''''+eExpression1+'''';
Но если в eExpression1 есть кавычка, то ее надо удвоить.
Нет никатит. Поблема осталась.
...
Рейтинг: 0 / 0
Строку в БД.
    #33723995
Александр Кордюм
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опубликуйте исходный код.
...
Рейтинг: 0 / 0
Строку в БД.
    #33724000
AbelKasum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кто сможет выполнить sql запрос.
SELECT * from table where field=строка([["]"'])
...
Рейтинг: 0 / 0
Строку в БД.
    #33724071
AbelKasum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никто незнает?
...
Рейтинг: 0 / 0
Строку в БД.
    #33724085
nikoloz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SELECT * from table where field=''строка''
...
Рейтинг: 0 / 0
Строку в БД.
    #33724114
AbelKasum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nikolozSELECT * from table where field=''строка''

Error.
...
Рейтинг: 0 / 0
Строку в БД.
    #33724265
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nikolozSELECT * from table where field=''строка''
SELECT * from table where field=[строка] ?

P.S. А какая то ошибка? Может не находится таблица table? Тогда надо дать права на эту таблицу тому из под чего Вы там работаете...
...
Рейтинг: 0 / 0
Строку в БД.
    #33724520
AbelKasum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey Ch nikolozSELECT * from table where field=''строка''
SELECT * from table where field=[строка] ?

P.S. А какая то ошибка? Может не находится таблица table? Тогда надо дать права на эту таблицу тому из под чего Вы там работаете...

Проблема не в таблице. Проблема в строке на поиск. Т.к. в ней есть все символы, которые использует ФОКС для обрамления символьных строк. В результате ошибка. Если приложение (например на Дельфи) будет использовать в качестве запроса данную строку (значения данного поля), то выскачить исключение. Ведь пользователь может ввести такую строку. И эту проблему похоже не обойти?!
...
Рейтинг: 0 / 0
Строку в БД.
    #33724565
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не давайте пользователю вводить какой-нибудь из ограничителей VFP.
Не знаю, как это будет на Delphi, а в VFP я делаю это так в событии KeyPress, например, объекта класса EditBox:
Код: plaintext
1.
2.
3.
4.
5.
LPARAMETERS nKeyCode, nShiftAltCtrl
* Замена "налету" символа  ' на  символ " при вводе текста 
IF VARTYPE(THIS.Value) = "C" AND nKeyCode =  39 
   DODEFAULT( 34 , nShiftAltCtrl)
    NODEFAULT
ENDIF
С уважением, Алексей
...
Рейтинг: 0 / 0
Строку в БД.
    #33724580
AbelKasum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я помоему нашёл решение. Покраёне для Дельфи.
Заменять все "не такие" символы на chr(asc("нетакой символ")).
Например: в поле есть запись со значением в поле: '[""]'. То заменить его на:

select * from table where field=chr(39)+chr(91)+chr(34)+chr(34)+chr(93)+chr(39)
...
Рейтинг: 0 / 0
Строку в БД.
    #33724835
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для FoxPro в качестве границы символьной константы можно использовать 3 символа:

квадратные скобки (открывающая и закрывающая)

одинарные кавычки

двойные кавычки

Другими словами, символьная константа - это то, что начинается с одного из этих символов и кончается парным ему символом.

Если сама константа содержит внутри себя символ, парный тому, который начинает символьную константу, то надо выделить этот символ в отдельную константу . Не экранировать (такого понятия в FoxPro нет), а именно выделить. Разбить одну константу на несколько.

Например, есть символьная константа вида

Код: plaintext
a'b"c[d]e"f'g

Т.е. она содержит в себе вообще все символы, которые могут быть использованы в качестве ограничителя символьных констант в FoxPro. В этом случае подобную константу следут сформировать следующим образом

Код: plaintext
[a'b"c]+"[d]"+[e"f'g]

Как это сделать технически в Delphi - ищите сами. Думаю, должны быть функции символьного анализа строк. А в FoxPro передаете не одну константу, а выражение (сумму) констант.
...
Рейтинг: 0 / 0
Строку в БД.
    #33724871
AbelKasum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Ты прав.
...
Рейтинг: 0 / 0
Строку в БД.
    #33725555
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi AbelKasum!

Для этого просто меняют стиль - использование жестко пробитых строковых
литералов в SQL команде на использование параметров. Не знаю как это будет в
delphi, а в самом фоксе это будет примерно так:

было:
lcNewVal = "My [really bad] string"
lcSQL = "UPDATE table1 SET column1 = [" + m.lcNewVal + "]"
SQLEXEC(lnHandle, m.lcSQL)
* Вызовет ошибку из-за наличия в строке тех-же символов что и саму строку в
SQL команде ограничивают

а вот так гораздо лучше:
lcNewVal = "My [really 'bad] string" + [and even " here]
lcSQL = "UPDATE table1 SET column1 = ?m.lcNewVal"
SQLEXEC(lnHandle, m.lcSQL)
* А вот тут ошибки не будет - т.к. параметр переаётся отдельно, и не
"сливается" с текстом команды.

Конечно способ реализации этого в delphi будет другой - причём будет
зависеть от того, через какие средства идёт доступ - через ODBC или ADO или
даже голый OLE DB...

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Строку в БД.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]