Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Программное добавление поля, Ошибка ODBC 
:(
    Опции темы
Лисеночек
Дата 10.8.2005, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 12.11.2004

Репутация: нет
Всего: нет



Добрый день.
DBF, ADO (ODBC)
У меня такая проблема – нужно в ходе работы программы добавить в таблицу поле и потом его удалить. В SQL Monitor все работает. А в программе пишет ошибку на вставку: «Недопустимая операция для таблицы, содержащей данные». Очень надо, помогите, плз, кто может.
smile
PM MAIL   Вверх
~FoX~
Дата 10.8.2005, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 4
Всего: 68



Лисеночек
Код в студию...


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Лисеночек
Дата 11.8.2005, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 12.11.2004

Репутация: нет
Всего: нет



Код такой:
Код

  ADOConnection1.Connected:=false;
  ADOConnection1.ConnectionString:='Provider=MSDASQL.1;Persist Security Info=False;Extended 
Properties="DSN=ac;UID=;SourceDB='+path+'SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;Null=Yes;Deleted=Yes;";Initial 
Catalog='+path;
  ADOConnection1.Connected:=true;

  ADODataSet2.Active:=false;
  ADODataSet2.CommandText:='SELECT DISTINCT A.SHIFR, A.NAIM, A.OBOZ, A.EI, A.IC, A.CENAD, B.NAIM
 , B.KYRS, A.KF, A.CENAR, B.NAIM, A.OC, A.DATE FROM HIST_C_P A, VAL B  WHERE A.SH=B.SH ORDER BY 
A.NAIM ';
[COLOR=red]//теперь не работает и здесь[/COLOR]
  ADODataSet2.Active:=true;

  ADOQuery1.Active:=false;
  ADOQuery1.SQL.Text:='ALTER TABLE HIST_C_P ADD CENAD_IC NUMERIC';
[COLOR=red]//раньше вилетало здесь[/COLOR]
  ADOQuery1.ExecSQL;

Короче я окончательно запуталась, что-то изменяла в настройках ADOConnection, в ODBC и теперь перестал работать даже запрос на выборку. Хотя на этапи конструирования работает....
PM MAIL   Вверх
Лисеночек
Дата 11.8.2005, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 12.11.2004

Репутация: нет
Всего: нет



Ситуация поменялась - запрос на выбор уже выполнается, а добавление все никак...
PM MAIL   Вверх
Петрович
Дата 11.8.2005, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 6
Всего: 55



А какую ошибку дает (сообщение)?


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Лисеночек
Дата 11.8.2005, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 12.11.2004

Репутация: нет
Всего: нет



Цитата
А какую ошибку дает (сообщение)?


"cannot open file [путь]\hist_c_p.dbf"

новый код COnnectionString:

Код

 ADOConnection1.ConnectionString:='Provider=MSDASQL.1;Persist Security Info=False;Extended 
Properties="Driver={Microsoft FoxPro VFP Driver (*.dbf)};UID=;SourceDB='+
  
path+';SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;Null=Yes;Deleted=Yes;";Initial 
Catalog='+path;

PM MAIL   Вверх
mspuz
Дата 11.8.2005, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 20.6.2005
Где: Ногинск

Репутация: нет
Всего: нет



У меня тоже проблема с dbf, как раз с модификацией структуры. А у меня встречный вопрос - а разве для dbf'а допустима команда "alter table"? Крутые программеры мне сказали что нет smile
PM MAIL   Вверх
Лисеночек
Дата 11.8.2005, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 12.11.2004

Репутация: нет
Всего: нет



Цитата(mspuz @ 11.8.2005, 12:42)
а разве для dbf'а допустима команда "alter table"? Крутые программеры мне сказали что нет 

Т.е. никак нельзя зименить страктуру? Но ведь в SQL Explorer запрос alter... работает...

PM MAIL   Вверх
mspuz
Дата 11.8.2005, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 20.6.2005
Где: Ногинск

Репутация: нет
Всего: нет



Вот что я смог откопать:
Код

var 
  I: Integer; 
  Field: TField; 
begin 
  { Поля можно добавлять только к неактивному набору данных. } 
  Table1.Active := False; 

  { Распределяем определенные поля если набор данных еще не был активным. } 
  Table1.FieldDefs.Update; 

  { Создаем все поля из определений и добавляем к набору данных. } 
  for I := 0 to Table1.FieldDefs.Count - 1 do 
  begin 
    { Вот где мы действительно сообщаем набору данных о необходимости создания поля. } 
    { Поле "назначается", но нам нужно не это, нам нужна просто ссылка на новое поле. } 
    Field := Table1.FieldDefs[I].CreateField(Table1); 
  end; 

  { Вот пример того, как вы можете добавить дополнительные, вычисленные поля } 
  Field := TStringField.Create(Table1); 
  Field.FieldName := 'Total'; 
  Field.Calculated := True; 
  Field.DataSet := Table1; 

  { Теперь мы можем увидеть наши поля. } 
  Table1.Active := True; 
end; 

Попробуй.

Это сообщение отредактировал(а) Girder - 11.8.2005, 13:07
PM MAIL   Вверх
Лисеночек
Дата 11.8.2005, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 12.11.2004

Репутация: нет
Всего: нет



Цитата(mspuz @ 11.8.2005, 13:01)
Вот что я смог откопать:

Но ведь ка создаються вычисляемые поля в делфовском DataSet, а мне нужно создать поле в физической таблице

PM MAIL   Вверх
Петрович
Дата 11.8.2005, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 6
Всего: 55



Цитата
.е. никак нельзя зименить страктуру? Но ведь в SQL Explorer запрос alter... работает...

На сколько я помню (давно с dbf не работал), SQL Explorer работает через BDE. А BDE и ADO это две большие раницы.


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Guest
Дата 11.8.2005, 17:03 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











народ, не морочьте себе головы. MS SQL, например, при изменении структуры таблицы вначале переливает все данные во временную таблицу, затем в пустой меняет структуру, а потом перекачивает данные обратно. И так IMHO происходит везде - с Фокса 2.6 по ORACLE. Именно поэтому нужен монопольный доступ к изменяемой таблице и т.п. Отсюда мораль: если не хочется головной боли - создавать новую таблицу с добавленным полем, в нее перекачивать данные, с ней работать, а затем грохать эту таблицу. Лично я так и делаю. А если надо навсегда изменить структуру - так просто не грохать таблицу, а грохнуть предка, а таблицу переименовать. По-другому все равно не получится. Это если программно, а не ручками.
Сомневающиеся могут попробовать изменить структуру таблицы (например добавить какое-либо поле - к потере данных не ведет) "на ходу" любым подручным средством на любом серваке (может быть кроме InterBase, и то вряд ли, версионность тут IMHO не прокатит). Вопли юзеров гарантирую smile.
2 вариант - посмотреть, что реально происходит при alter table - ну тут зависит от того, чем меняем. В Лисе это отследить было практически невозможно (на небольших таблицах). А сервак честно доложит, если попросить, что он _заменил_ таблицу другой - с другой структурой и перекачанными данными.
У меня как-то изменение структуры минуты заняло на совсем даже маленькой табличке (около 1 МБ) - преобразование хитрое было.

Лисеночек
Вычисляемые поля не хранятся в базе. Датасет сам с ними морочится вплоть до того, что если, например, курсор на клиенте (а как правило так), то у разных клиентов на одной записи могут получиться разные значения вычисляемого поля. Дабы такого не было я напрочь запрещаю 2 клиентам мусолить одну такую запись. Кто ломится 2-м - получает отлуп.

mspuz
Твои крутые программеры видимо кроме Fox 2.6 ничего не видели. Насчет 3 версии не скажу - уже не помню, но и в 5, и в 6 версии Лиса (а это 1998 год) alter table поддерживается, но ... см. выше. Все точно так же. Т.е. один черт всех надо с таблицы турнуть. И ручками напрограммировать вместо alter table - делов всего ничего. scatter - gather и в дамках smile Если alter нету.

  Вверх
SergeBS
Дата 12.8.2005, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1111
Регистрация: 10.6.2005
Где: Владимир

Репутация: 11
Всего: 22



Пардон, прозевал, что не вошел.
Цитата

народ, не морочьте себе головы
...

это я. Если у кого по изменению структуры остались вопросы - у меня это регулярно. В
Fox 2.6 & 6.0 & MS SQL 7.0&2000. Такой зоопарк.
[/size][size=6]
Offtopic on
А кто-нибудь подскажет, почему в Mozilla меня здесь то автоматом регистрируют, то нет. Есть ли способ стабилизировать это дело? Хожу через proxy.
Maxthon автоматом проскакивает как надо. Но он глючит в другом smile.
Offtopic off

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0547 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.