Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 09.02.2013, 03:32
Awesome Awesome вне форума
Прохожий
 
Регистрация: 02.12.2012
Сообщения: 6
Репутация: 10
По умолчанию Delphi и SQL (ADO, Access)

Здравствуйте. Возникла такая проблема:
Использую Access через ADO. Создаю новое поле (столбец) в бд:
Код:
CurDate:=DateToStr(Now);
for i := 1 to Length(CurDate) do
  if CurDate[i]='.' then
    CurDate[i]:='-';
ADOQuery.Close;
ADOQuery.SQL.Clear;
ADOQuery.SQL.Add('ALTER TABLE Таблица ADD '+CurDate+' STRING NOT NULL UNIQUE');
ADOQuery.ExecSQL;
Выскакивает ошибка: ошибка синтаксиса при определении поля. Что делать?
Ответить с цитированием
  #2  
Старый 09.02.2013, 03:54
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Имя поля не может начинаться с чисел и содержать в себе символ '-'. Если уж очень надо создавать поля (хотя это плохая практика), то сделай имя поля что-то типа DATE_20130208

ЗЫ. Вроде, в access можно имя поля заключить в кв. скобки и тогда это прокатит, но не рекомендую пользоваться этим трюком. Привыкнешь, потом будешь тупить, когда потребуется создать такое поле в нормальной БД, а там этот фокус не работает.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
Awesome (09.02.2013)
  #3  
Старый 09.02.2013, 12:23
Awesome Awesome вне форума
Прохожий
 
Регистрация: 02.12.2012
Сообщения: 6
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Имя поля не может начинаться с чисел и содержать в себе символ '-'.
Хмм, странно, вручную создается название поля так как надо. Сделал так:
Код:
  ADOQuery.SQL.Add('ALTER TABLE Таблица ADD ['+CurDate+'] VARCHAR(50) NOT NULL UNIQUE');
появилась ошибка: "Не удается найти таблицу или индекс". Или я не там поставил скобки?
Цитата:
Сообщение от lmikle
...но не рекомендую пользоваться этим трюком.
А как же тогда быть? А если на компьютере не окажется Access`а или другой аналогичной программы?
Ответить с цитированием
  #4  
Старый 10.02.2013, 01:01
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

1. А зачем вообще такой изврат? Создавать поле с именем текущей даты.
2. А почему вы решили, что в акцессе есть тип varchar ?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 10.02.2013, 06:10
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от Awesome
Хмм, странно, вручную создается название поля так как надо. Сделал так:
Код:
  ADOQuery.SQL.Add('ALTER TABLE Таблица ADD ['+CurDate+'] VARCHAR(50) NOT NULL UNIQUE');
появилась ошибка: "Не удается найти таблицу или индекс". Или я не там поставил скобки?
Ну не знаю, под рукой нету аксеса...

Цитата:
Сообщение от Awesome
А как же тогда быть? А если на компьютере не окажется Access`а или другой аналогичной программы?

Почитать книжки на тему проектирования БД, а именно про третью нормальную форму. Вместо добавления полей можно создать таблицу, где одним из полей будет твоя дата (только одно поле), а другим - ссылка на соотв. строку той таблицы, которую ты пытаешься модифицировать.

По поводу "если не будет аксеса", то ответ простой - либо в требованиях к программе это прописываешь (ну да, будет у твоей программы такая зависимость), либо берешь другую БД, причет такую, которую ты сможешь "таскать" за собой. Варианты: SQLite (одна библиотека), FB Embedded (там много файлов, особенно в последних версиях, но зато есть другие плюсы).
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:14.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter