1 / 1 / 1
Регистрация: 16.05.2013
Сообщений: 240

Проверить существование поля в таблице

02.01.2015, 19:37. Показов 12671. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Как можно проверить существование поля в таблице, и если такого поля нет - добавить его. СУБД Access.
И еще один вопрос, есть код

Delphi
1
2
 DM.DataModule3.ADOQuery1.SQL.Add('Select * From ' + GrPr);
 DM.DataModule3.ADOQuery1.SQL.Add('ALTER TABLE '+ GrPr +' ADD '+ SData +' TEXT');
при запуске программы вылетает ошибка "Ошибка синтаксиса в предложении FROM".
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.01.2015, 19:37
Ответы с готовыми решениями:

Как правильно проверить запись в таблице на существование?
Всё время проверял запись как: SELECT id FROM users WHERE username="john"; Сейчас задумался, а как будет быстрее, код выше, или этот...

Проверить существование поля объекта
Как проверить существование определённого поля (переменной) у объекта? В метод leadLocalLog передаётся объект формы и сообщение. Этот...

Проверить существование файла. Проверить содержание ячейки
Уважаемые программисты я только начинаю тернистый путь, так что извините если вопросы не корректны. 1) Я в цикле открываю по очереди...

10
Эксперт Pascal/Delphi
 Аватар для droider
4889 / 2823 / 865
Регистрация: 04.10.2012
Сообщений: 10,268
02.01.2015, 23:05
Цитата Сообщение от gordan11 Посмотреть сообщение
Как можно проверить существование поля в таблице
Delphi
1
2
3
4
 if DM.DataModule3.ADOQuery1.FindField('имя_поля')=nil then
Application.MessageBox('Поле не найдено!', 'Ошибка', mb_iconerror)
else
//добавляем его через ALTER TABLE...ADD...
Цитата Сообщение от gordan11 Посмотреть сообщение
вылетает ошибка "Ошибка синтаксиса в предложении FROM".
что такое GrPr? Попробуйте так
Delphi
1
DM.DataModule3.ADOQuery1.SQL.Add('Select * From ' + QuotedStr(GrPr));
1
1 / 1 / 1
Регистрация: 16.05.2013
Сообщений: 240
03.01.2015, 00:11  [ТС]
Цитата Сообщение от droider Посмотреть сообщение
что такое GrPr? Попробуйте так
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
begin
 GrBox := Grupbox.Text;    //Получаем данные из комбобоксов
 PrBox := PredBox.Text;
 If (GrBox = '') then showmessage('Âûáåðèòå ãðóïïó')   //Проверка на наличие данных в комбобоксах
 Else
 Begin
 if
  (PrBox = '') then showmessage('Âûáåðèòå ïðåäìåò')
  Else
  Begin
 s := GrBox;
 GrBox := Translit(s);                                  //Транслит
 s := Prbox;
 PrBox := Translit(s);
 GrPr := GrBox + '_' + PrBox;                          //Получение запрашиваемой клиентом таблицы
 list := tstringlist.Create;
   DM.DataModule3.ADOConnection1.GetTableNames(list);
   if list.indexOf(GrPr) = -1 then                     //Проверка наличия таблицы
     showmessage('òàáëèöà îòñòóòñòâóåò')
     else
     Begin
      SData := DateToStr(Date);
      DM.DataModule3.ADOQuery1.Close;
      DM.DataModule3.ADOQuery1.SQL.Clear;
      DM.DataModule3.ADOQuery1.SQL.Add('Select * From ' + GrPr);
      DM.DataModule3.ADOQuery1.SQL.Add('ALTER TABLE '+ GrPr +' ADD '+ SData +' TEXT');
      DM.DataModule3.ADOQuery1.Open;
     end;
end;
end;
end;
А не может такая ошибка выскакивать из за того, что он 2 запроса читает как один
Delphi
1
2
DM.DataModule3.ADOQuery1.SQL.Add('Select * From ' + GrPr);
      DM.DataModule3.ADOQuery1.SQL.Add('ALTER TABLE '+ GrPr +' ADD '+ SData +' TEXT');
Наверное нужно было сразу весь код кинуть
0
Эксперт Pascal/Delphi
 Аватар для droider
4889 / 2823 / 865
Регистрация: 04.10.2012
Сообщений: 10,268
03.01.2015, 00:25
Да, может. Лучше запросы формировать отдельно.

Еще подкорректируйте этот блок кода. Так будет правильнее
Delphi
1
2
3
4
5
 GrBox := GrupBox.Items[GrupBox.ItemIndex];    //Получаем данные из комбобоксов
 PrBox :=PredBox.Items[PredBox.ItemIndex];
 If GrupBox.ItemIndex=-1  then showmessage('Выберите группу');  //Проверка на наличие данных в комбобоксах
 if PredBox.ItemIndex=-1 then showmessage('Выберите предмет');
...
1
1 / 1 / 1
Регистрация: 16.05.2013
Сообщений: 240
03.01.2015, 15:20  [ТС]
Цитата Сообщение от droider Посмотреть сообщение
//добавляем его через ALTER TABLE...ADD...
Поле не добавляется
Может я не так делаю?
Delphi
1
2
3
4
   DM.DataModule3.ADOQuery1.Close;
      DM.DataModule3.ADOQuery1.SQL.Clear;
      DM.DataModule3.ADOQuery1.SQL.Add('ALTER TABLE '+ GrPr +' ADD '+ SData);
      Dm.DataModule3.ADOQuery1.Open;
0
Эксперт Pascal/Delphi
 Аватар для droider
4889 / 2823 / 865
Регистрация: 04.10.2012
Сообщений: 10,268
03.01.2015, 15:28
Цитата Сообщение от gordan11 Посмотреть сообщение
Dm.DataModule3.ADOQuery1.Open;
должно быть
Delphi
1
Dm.DataModule3.ADOQuery1.ExecSQL;
0
1 / 1 / 1
Регистрация: 16.05.2013
Сообщений: 240
03.01.2015, 15:34  [ТС]
Цитата Сообщение от droider Посмотреть сообщение
должно быть
Код Delphi
1
Dm.DataModule3.ADOQuery1.ExecSQL;
Все равно не создает
0
Эксперт Pascal/Delphi
 Аватар для droider
4889 / 2823 / 865
Регистрация: 04.10.2012
Сообщений: 10,268
03.01.2015, 15:41
Цитата Сообщение от gordan11 Посмотреть сообщение
Все равно не создает
Конечно. Запрос на создание поля неправильный.

SData := DateToStr(Date);
это вы дату преобразовываете в строку? SData - это поле с датой? У него тип в Access какой указан?
Шаблон запроса
ALTER TABLE Таблица ADD COLUMN новое поле [тип]
0
1 / 1 / 1
Регистрация: 16.05.2013
Сообщений: 240
03.01.2015, 15:46  [ТС]
Цитата Сообщение от droider Посмотреть сообщение
это вы дату преобразовываете в строку? SData - это поле с датой? У него тип в Access какой указан?
Да, дата это строка. Sdata это переменная с датой, и мне нужно создать поле с именем SData
0
21 / 21 / 8
Регистрация: 07.01.2009
Сообщений: 556
01.08.2015, 18:00
У меня команда
Delphi
1
if DM.DataModule3.ADOQuery1.FindField('имя_поля')=nil then
всегда показывает, что поле 'имя_поля' не существует, даже если оно есть в базе.
Почему?
У ADOQuery1 прописано свойство connection, что ещё надо? открыть что-ли этот ADOQuery1?

Добавлено через 3 часа 33 минуты
Разобрался, нужно сначала сделать выборку и открыть набор.
0
5 / 1 / 0
Регистрация: 26.05.2014
Сообщений: 18
25.01.2016, 07:14
Я так добавляю, если не верно исправьте:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure TDB.SQLPost(DS:TDataSource; posts:string);
begin
  with Query do
    begin
      if Active then Close;
      Datasource:=DS;
      SQL.Clear;
      SQL.Add(posts);
      ExecSQL;
    end;
end;
 
procedure TDB.TableAddField(DS:TDataSource;NameTable,NameField:string);
begin
  if DS.DataSet.FindField(Namefield)=nil
    then ShowMessage('Нет') //DB.SQLPost(DS,'ALTER TABLE '+NameTable+' ADD '+Namefield+' INT');
      else ShowMessage('Есть');
end;
Сорри дату спутал=)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.01.2016, 07:14
Помогаю со студенческими работами здесь

Проверка на существование записи в таблице
Делаю проверку с помощью когда ниже но мне он не нравится из-за своей громозкости, возможно ли как то его сократить? $result =...

Проверка на существование записи в таблице
Добрый вечер! Подскажите есть ли в firebird аналог выражения If exists (select id from table where id=const) then begin .... ...

Провеска на существование записи в таблице MySQL
Доброго времени суток!!! Как сделать проверку существования записи в таблице? Пытаюсь сделать так: $r = mysql_query (' ...

Глючит проверка на существование записи в таблице
Во общем написал код для проверки, вот проблемный кусок кода: if(!mysql_fetch_row(mysql_query("SELECT 1 FROM `DataBase` WHERE...

Проверка на существование записи в таблице SQLite
Как сделать проверку содержит ли таблица определенную запись, если нет то добавить эту запись. Типа условного оператора if-else. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru