Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2012, 04:53   #1
laFleuere
 
Регистрация: 10.06.2012
Сообщений: 4
Сообщение Изменение Базы Данных через Update

Код:
for i:=1 to DBGrid1.DataSource.DataSet.RecordCount do
   begin
      DataSource1.DataSet.RecNo:=i;
      GameTitle:=DataSource1.DataSet.FieldByName('Title').AsString;
      if DirectoryExists(DataSource1.DataSet.FieldByName('Path1').AsString)
      then begin
//            ADOQuery1.SQL.Clear;
              ADOQuery1.SQL.Add('UPDATE gameTable SET status='+QuotedStr('Not Found')+' WHERE Title LIKE '+QuotedStr('%'+GameTitle+'%'));
              ADOQuery1.ExecSQL;
           end;
Смысл следующий. Изначально загружаю базу через ADOQuery1. Затем проверяю, если директория из поля 'Path1' не существует, то полю 'Status' данной записи присваиваю значение 'Not Found'. Все это проводится в цикле для все записей. При запуске программы ругается на ADOQuery1.ExecSQL с ошибкой 'Syntax error in FROM clause'. Если убрать комментарий с ADOQuery1.SQL.Clear, то ошибка 'Field Title not found'. В чем проблема и как ее решить?
laFleuere вне форума Ответить с цитированием
Старый 10.06.2012, 06:11   #2
ych_del
Форумчанин
 
Аватар для ych_del
 
Регистрация: 06.02.2011
Сообщений: 149
По умолчанию

1. Частности.

> ADOQuery1.ExecSQL с ошибкой 'Syntax error in FROM clause'

Ты уверен, что ADOQuery1.SQL.Text изначально пустой? Проверь интереса ради.
А еще подумай, что будет происходить при каждом проходе цикла, если не очищать запрос.
Исправь ADOQuery1.SQL.Add('UPDATE ... на ADOQuery1.SQL.Text := 'UPDATE ...

> Если убрать комментарий с ADOQuery1.SQL.Clear, то ошибка 'Field Title not found'. В чем проблема и как ее решить?

Телепаты в отпуску. Скорее всего, ты и в самом деле с именем поля ошибся - СУБД просто так, чтобы тебя позлить, такие сообщения выдавать не будет.

2. Общее

Юзай параметры, ну на фига тебе вот эти извращения с QuotedStr и т.п.?
Профессиональный конвертор галлюцинаций заказчика в алгоритмическую структуру.
ych_del вне форума Ответить с цитированием
Старый 10.06.2012, 09:38   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Скорее всего
Я б сказал - Однозначно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.06.2012, 14:34   #4
laFleuere
 
Регистрация: 10.06.2012
Сообщений: 4
По умолчанию

2ych_del

ADOQuery1.SQL.Text изначально содержит 'SELECT * FROM gameTable'

Поле 'Title' существует, но именно когда я убираю комментарий с ADOQuery1.SQL.Clear, то он начинает так ругаться. В этом то вся и загвоздка.

P.S.
Цитата:
Исправь ADOQuery1.SQL.Add('UPDATE ... на ADOQuery1.SQL.Text := 'UPDATE ...
Спасибо, это помогло
laFleuere вне форума Ответить с цитированием
Старый 10.06.2012, 14:38   #5
ych_del
Форумчанин
 
Аватар для ych_del
 
Регистрация: 06.02.2011
Сообщений: 149
По умолчанию

Кстати, а какая СУБД? Просто отвлеченный вопрос.
Профессиональный конвертор галлюцинаций заказчика в алгоритмическую структуру.
ych_del вне форума Ответить с цитированием
Старый 10.06.2012, 14:54   #6
laFleuere
 
Регистрация: 10.06.2012
Сообщений: 4
По умолчанию

2ych_del

Если честно, я не смогу ответить на твой вопрос. Когда-то учил все это, а сейчас уже все эти определения забыл. Подключил через Access (если это вообще то).

Кстати, теперь появилась другая ошибка:

Код:
              ADOQuery1.Active:=False;
              ADOQuery1.SQL.Clear;
              ADOQuery1.SQL.Text:='UPDATE gameTable SET Status='+QuotedStr('Not Found')+' WHERE Title LIKE '+QuotedStr('%'+GameTitle+'%');
              ADOQuery1.ExecSQL;
              ADOQuery1.Active:=True;
Теперь он говорит 'Current provider does not support returning multiple recordset form a single execution', а если продолжить, то 'ADOQuery1: CommandText does not return a result set'
laFleuere вне форума Ответить с цитированием
Старый 10.06.2012, 16:10   #7
ych_del
Форумчанин
 
Аватар для ych_del
 
Регистрация: 06.02.2011
Сообщений: 149
По умолчанию

Код:
              ADOQuery1.Active:=False;
              ADOQuery1.SQL.Clear;                    // ЛИШНЕЕ
              ADOQuery1.SQL.Text:='UPDATE gameTable SET Status='+QuotedStr('Not Found')+' WHERE Title LIKE '+QuotedStr('%'+GameTitle+'%');
              ADOQuery1.ExecSQL;
              ADOQuery1.Active:=True;     // УДАЛИТЬ
Еще вопрос. У тебя DBGrid1 отображает данные, получаемые с помощью ADOQuery1?
Профессиональный конвертор галлюцинаций заказчика в алгоритмическую структуру.
ych_del вне форума Ответить с цитированием
Старый 10.06.2012, 16:33   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Еще вопрос.
Гы!... Дай угадаю:
Код:
              ADOQuery1.Active:=False;
              s:=ADOQuery1.SQL.Text;
              ADOQuery1.SQL.Text:='UPDATE gameTable SET Status='+QuotedStr('Not Found')+' WHERE Title LIKE '+QuotedStr('%'+GameTitle+'%');
              ADOQuery1.ExecSQL;
              ADOQuery1.SQL.Text:=s; 
              ADOQuery1.Active:=True;
Где s:String - переменка
И все будет чики-пики, если у автора данные нужно вывести в грид, или короче говоря открыть с изменениями.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.06.2012, 16:35   #9
ych_del
Форумчанин
 
Аватар для ych_del
 
Регистрация: 06.02.2011
Сообщений: 149
По умолчанию

Цитата:
Гы!... Дай угадаю:
К тому и спрашиваю (:

Цитата:
И все будет чики-пики, если у автора данные нужно вывести в грид, или короче говоря открыть с изменениями.
Вот точно не помню, но, ЕМНИП, должно прокатить вообще вот так:

Код:
ADOQuery1.First;
with ADOQuery1 do while not Eof do begin
   if not DirectoryExists(FieldByName('Path1').AsString) then begin
      Edit;
      FieldByName('status').AsString := 'Not found';
      Post;
   end;
   Next;
end;
Во всяком случае, на том же FIBDataSet прописываешь SQLs.UpdateSQL и в путь.
Профессиональный конвертор галлюцинаций заказчика в алгоритмическую структуру.

Последний раз редактировалось ych_del; 10.06.2012 в 16:37.
ych_del вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение данных в БД через DBGrid leklerk БД в Delphi 3 22.02.2012 03:11
Изменение данных в БД запросом UPDATE Elegance3 Помощь студентам 5 03.12.2011 17:37
Заполнение базы данных через сеть Vladimir64 Фриланс 2 28.10.2011 18:58
Базы данных изменение данных (Delphi (ADO)). RuthlessD Помощь студентам 0 16.06.2011 19:57
создание базы данных через форму mistx Microsoft Office Excel 7 16.10.2008 07:55