powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Инструкция Update в SQL
22 сообщений из 22, страница 1 из 1
Инструкция Update в SQL
    #32098744
Фотография drbond
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите пожалуйста можно ли в инструкции Update задать диапазон значений поля для обновления?
То есть верно ли выражение вида:
Код: plaintext
1.
UPDATE Table1 SET Field1 = 'Значение1'
 WHERE Field1 IN ('Значение2', 'Значение3',...'ЗначениеN'); 

Заранее благодарю.
...
Рейтинг: 0 / 0
Инструкция Update в SQL
    #32098753
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно
...
Рейтинг: 0 / 0
Инструкция Update в SQL
    #32098787
Фотография drbond
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда ещё вопрос при попытке исполнения данного запроса Дельфи выкидывает сообщение "Текущий проводник не поддерживает возвращение нескольких наборов записей"
Вот код запроса. Может что делаю не так?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
zapr:string;
begin
 Memo1.Lines.Strings[ 0 ] :=  QuotedStr(Memo1.Lines.Strings[ 0 ]);//Добавляем символы к строке запроса
 if Memo1.Lines.Count >  1  then begin
for i:=  1  to Memo1.Lines.Count- 1  do
 Memo1.Lines.Strings[i] := ' OR '+  QuotedStr(Memo1.Lines.Strings[i]);
 zapr:= Memo1.Text;//Формирую строку запроса
 adoquery2.SQL.Clear;
 adoquery2.SQL.Add('UPDATE '+sfm+' SET '+ Label3.Caption+' = '+ QuotedStr(edit1.Text));// sfm имя таблицы, Label3.Caption - имя поля
 adoquery2.SQL.Add('Where '+Label3.Caption+ ' = ' +zapr);
 adoquery2.ExecSQL;
 end;
end;
...
Рейтинг: 0 / 0
Инструкция Update в SQL
    #32098896
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык ты бы еще привел, чего в переменной zapr находится - откуда я знаю, чего ты там пишешь
...
Рейтинг: 0 / 0
Инструкция Update в SQL
    #32099236
Фотография drbond
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В премеменной zapr находится строка вида 'Значение1, Значение2, Значение3'.

Но самое интересное не это. Запрос то он собака выполняет в конце концов, но пишет следующее:
1. Project Project1 raised exeptrion class EOleExeption with message:" Текущий проводник не поддерживает возврат нескольких записей в результате одной операции."
2. EDataBaseError: "ADOQuery2: Command text does not return a result set."

То есть обновить одно поле - это ещё пожалуйста, а несколько да ещё с разными значениями - фиг вам.
Остаётся добавить что использую связь с базой данных через ODBC OLE, потому как требуется устанавливать связь в том числе с таблицами в формате dBase (*.dbf).
...
Рейтинг: 0 / 0
Инструкция Update в SQL
    #32099335
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вообще то надо писать:

adoquery2.SQL.Add('Where '+Label3.Caption+ ' in ' +zapr);

Memo1.Lines.Strings := ' OR '+ QuotedStr(Memo1.Lines.Strings); - это что такое?

Ты перед выполнением посмотри, что в adoquery2.SQL находится, сюда положи - тогда понятнее будет
...
Рейтинг: 0 / 0
Инструкция Update в SQL
    #32099591
Фотография drbond
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь, просто пробовал вариант с OR, когда по IN в запросе ничего дельного получить не удалось. Разумеется там сейчас нет никакого OR (в формировании строки запроса. Сейчас код имеет такой вид:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
zapr:string;
begin
 Memo1.Lines.Strings[ 0 ] :=  QuotedStr(Memo1.Lines.Strings[ 0 ]);
 if Memo1.Lines.Count >  1  then begin
for i:=  1  to Memo1.Lines.Count- 1  do
 Memo1.Lines.Strings[i] := ','+  QuotedStr(Memo1.Lines.Strings[i]);
 zapr:= Memo1.Text;
 adoquery2.SQL.Clear;
 adoquery2.SQL.Add('UPDATE '+sfm+' SET '+ Label3.Caption+' = '+ QuotedStr(edit1.Text));
 adoquery2.SQL.Add('Where '+Label3.Caption+ ' IN (' +zapr+');');
 adoquery2.Active:=true;
 adoquery2.ExecSQL;

Правда ошибки выдаются те же, что и описанные ранее.
...
Рейтинг: 0 / 0
Инструкция Update в SQL
    #32099691
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да код не надо уже - выведи то, что получилось в в adoquery2.SQL.Text. Тогда понятнее будет
...
Рейтинг: 0 / 0
Инструкция Update в SQL
    #32100427
Фотография drbond
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
UPDATE ST_POLIS  SET ST1 = '111'
Where ST1 IN ('14349','16970','39');

REM: Таблица ST_POLIS, поле ST1. Задача обновить значения 14349, 16970, 39
(в поле хранятся как текст) на 111 (тоже как текст). Получаю описанные выше ошибки.
...
Рейтинг: 0 / 0
Инструкция Update в SQL
    #32100435
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А точка с запятой нужна ли?

Если сделать не in () а = 'значение' то исполняется или тоже ошибки?

База какая?
...
Рейтинг: 0 / 0
Инструкция Update в SQL
    #32100497
Фотография drbond
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
База таблица *.dbf в (FoxPro). Соединение через OLE ODBC Connection. Для связи с базой данных соответственно компоненты ADO.
Без точки с запятой, с точкой с запятой ей всё едино. А если в инструкции IN поставить равно, то пишет нарушение синтаксиса запроса. Со скобками без скобок, тоже без разницы. Всё равно возвращает те же ошибки. Скобки и точку с запятой поставил для порядка, чтобы не сильно от ANSI SQL отличалось :-).
...
Рейтинг: 0 / 0
Инструкция Update в SQL
    #32100519
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если равно оставляешь, то только одно значение нужно

Код: plaintext
1.
UPDATE ST_POLIS  SET ST1 = '111'
Where ST1 = '14349'
...
Рейтинг: 0 / 0
Инструкция Update в SQL
    #32100537
Фотография moonmike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если у ADOQuery выставить ExecuteOptions - eoExecuteNoRecords в True???
...
Рейтинг: 0 / 0
Инструкция Update в SQL
    #32100705
Фотография drbond
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2tygra > Я понимаю, что если поставить знак равенства то запрос примет у меня только одно значение. Но хочется обновить сразу несколько значений, поэтому и ставлю оператор IN. Ситуация то простая. Есть база данных адресов. По причине оператора в ней есть идентичные адреса с разным написанием. Задача - стандартизировать написание адресов. То есть находим идентичные адреса с разным написанием, отмечаем нужные и обновляем на какое-то указанное значение. Обновлять по одному полю за раз неохота да и долго учитывая количество ошибок по написанию адреса в БД.

2moonmike > Пробовал. Результат аналогичен. См. Описанные выше ошибки.
...
Рейтинг: 0 / 0
Инструкция Update в SQL
    #32100742
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скорее всего проблему решить таким путём не удастся при использовании текущего драйвера (будь то оледб или одбс) пишет же - "не могу вернуть несколько наборов" - чего вы его насилуете ?
...
Рейтинг: 0 / 0
Инструкция Update в SQL
    #32100768
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, значит не умеет драйвер понимать IN
...
Рейтинг: 0 / 0
Инструкция Update в SQL
    #32100769
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, значит не умеет драйвер понимать IN
...
Рейтинг: 0 / 0
Инструкция Update в SQL
    #32100943
Фотография drbond
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда ещё один вопрос: какой драйвер БД можно использовать для подключения к таблицам DBase? (FoxPro и прочим с расширением *.dbf).
...
Рейтинг: 0 / 0
Инструкция Update в SQL
    #32100949
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Через BDE - dbase и использовать.
...
Рейтинг: 0 / 0
Инструкция Update в SQL
    #32100965
Фотография drbond
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно без BDE? А? Больно уж неохота возращаться к тому, что поросло мхом и разлагается. :-)
...
Рейтинг: 0 / 0
Инструкция Update в SQL
    #32101001
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну тогда ODBC - все равно dbf
...
Рейтинг: 0 / 0
Инструкция Update в SQL
    #32101017
Фотография drbond
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо! Буду пробовать.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Инструкция Update в SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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