Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.10.20;
Скачать: [xml.tar.bz2];

Вниз

Ошибка добавления записи в dbgrid с несколькими lookup полями   Найти похожие ветки 

 
selyanin ©   (2012-06-26 09:48) [0]

Доброго времени суток.
Есть DBGrid связанный с ADOTable (БД в MSSQL 2000). Есть несколько lookup полей. Ошибка возникает при добавлении новой записи, точнее после ввода значения в любое поле. Если кратко: EOleException "Ошибка неизвестного типа". Если оставить только 1 lookup поле (любое) и начинать редактирование начинать с данного поля, то все проходит нормально. Мне кажется, что ошибка из-за того, что после заполнения любого поля происходит обновление (добовление новой) записи, а так как не все lookup поля заполнены, то появляется ошибка (хотя все поля в БД могут быть пустыми кроме id (первичный ключ)). Заранее благодарен.


 
Anatoly Podgoretsky ©   (2012-06-26 10:12) [1]

> selyanin  (26.06.2012 09:48:00)  [0]

В dbgrid нет данных
Table давно уже не используют, особенно с SQL серверами
Неизвестная ошибка не имеет решения


 
selyanin ©   (2012-06-26 10:22) [2]


> В dbgrid нет данных

прекрасно понимаю

> Table давно уже не используют, особенно с SQL серверами

раньше использовали и все работало

> Неизвестная ошибка не имеет решения

Есть какие-то предложения как более подробно конкретизировать ошибку для Вашего понимания?

А в целом, не понятно для чего был Ваш ответ.


 
sniknik ©   (2012-06-26 10:24) [3]

> Неизвестная ошибка не имеет решения
имеет... :), правда решать ее обычно нет нужды... при правильном написании (без ADOTable) с учетом что пишется все таки клиент сервер, а не файл сервер.

ADOTable  может привести к подобному. если прикинуть как делается вставка для файл сервера, и как будет составлен запрос последующее на обновление, в худшем случае  по всем значениям = NULL... от такого какая угодно ошибка может быть.


 
sniknik ©   (2012-06-26 10:25) [4]

> Есть какие-то предложения как более подробно конкретизировать ошибку для Вашего понимания?
код. "теоретизирования" в вопросах недопустимы.


 
Anatoly Podgoretsky ©   (2012-06-26 10:27) [5]


> Есть какие-то предложения как более подробно конкретизировать
> ошибку для Вашего понимания?

Не хочешь говорить, какая конкретно ошибок, можешь не говорит, но тогда чего ты от нас то хочешь, чтобы мы погадали?


 
sniknik ©   (2012-06-26 10:32) [6]

> какая конкретно ошибок
он ее привел - EOleException "Ошибка неизвестного типа".
такая ошибка есть.

а вот от чего она конкретно... вопрос. кстати есть вариант, когда она "глушится" на этапе выполнения (т.е. обработка в компонентах такая - проигнорировать), и вылезает только в дебаге.
без инфы, только по сообщения не точнее не сказать.


 
selyanin ©   (2012-06-26 11:16) [7]

2 sniknik
Лет 5 назад делал и все работало.
Еще раз попробую объяснить задачу и проблему.
Есть форма на ней DBGid и DBNavigator (прикрученные к ADOTable через DataSource). Если не использовать подставляемые поля все работает как положенно (добавляет, изменяет, удаляет). Если добавить ОДНО lookup поле то все кроме добовления так же отлично работает, добавить же можно только если первым внести значение у данного поля (подставляемого) иначе выскакивает ошибка. Если же ДВА и более lookup полей, то добавление вообще становится не возможным.
Как я понимаю, проблема именно с подставляемыми полями, потому что стоит их исключить и все РАБОТАЕТ. Можно сделать дополнительные элементы формы и в них вносить данные для новой записи и через ADOQuery вставить новую запись, проверял все работает, но зачем лишние проблемы.


 
Inovet ©   (2012-06-26 12:51) [8]

> [7] selyanin ©   (26.06.12 11:16)
> Лет 5 назад делал и все работало.

Тебе говорят, как сделать правильно с TADODataset, а не через зад в смысле TADOTable. Тогда сам сможешь управлять поведением, а не полагаться на костыли.


 
Германн ©   (2012-06-26 13:31) [9]


> а не через зад в смысле TADOTable

Имхо и без DBNavigator.


 
Anatoly Podgoretsky ©   (2012-06-26 14:01) [10]


> он ее привел - EOleException "Ошибка неизвестного типа".

Тогда я невнимательно читал. Но MS SQL это OLE и оно проблематично с Table и SQL


 
sniknik ©   (2012-06-26 16:02) [11]

> проблема именно с подставляемыми полями
да, скорее всего так и есть (как представляю), т.к. при обновлении получается неопределенность - какую из записей, по какому полю обновлять...
был бы TADODataset с той же проблемой, можно было бы указать поле обновления/главную таблицу/даже запрос на обновление записи... а вот с ADOTable облом`с... и не потому что нельзя, а потому что мне например влом что-то объяснять при ТАКОМ баге (ADOTable), к тому же еще придумывать как сделать через "Ж" и + понятно тебе.

> но зачем лишние проблемы.
лишние проблемы ты приобрел положив на форму ADOTable, нужда в переписывании это только последствия, писал бы сразу правильно, не пришлось бы.


 
student1   (2012-08-16 16:38) [12]

Так проблема закрылась? Киньте решение...


 
stas ©   (2012-08-16 17:09) [13]

selyanin ©   (26.06.12 11:16) [7]
Помню встречал на 2000 mssql такую ошибку, но ее только выводил дебаггер, exe работал без ошибок.


 
ixilimuse   (2012-11-23 07:55) [14]

С подобной проблемой встречался. Вместо TADOTable использовались DataSet & Query...
Причем ошибка реально появлялась в Дебаг режиме. Экзешник работал нормально.

В том далеком мохнатом году, проблему решили заменив lookup поля на left outer join.. А редактирование в таблице - было запрещено. Собственно в том случае концепция программы позволяла..

Сейчас столкнулся с похоже проблемой в другом проекте.. Стал усердно вспоминать. И на сколько припоминаю, проблема как раз в значениях NULL в тех полях, которые являются lookup. Если исключить такую ситацию, то скорее всего проблемы не станет. Сегодня вечером буду пробовать исключить ситуацию. Решение - отрепортю.


 
ixilimuse   (2012-11-27 20:17) [15]

В общем на самом деле проблема в NULL значениях.

Каким образом обошел? Если делать добавление записи через набор данных, в любом случае будет NULL. Хотя вот сейчас думаю что возможно можно было использовать BeforeInsert??

Мое решение такое:

procedure TfrmBlank.btnAddClick(Sender: TObject);
var
 NewID: Integer;
begin
 data.qOperation.SQL.Text := "insert into obj_Blank (dDate, bFotoSession, bVideoSession, lTeacherID, lShoolID, BlankNumber)"+#13;
 data.qOperation.SQL.Text := data.qOperation.SQL.Text +
 " VALUES("+QuotedStr(FormatDateTime("yyyy-mm-dd hh:MM:ss",Now()))+",0,0,0,0,"+QuotedStr(data.GetDocNum("","obj_Blank"))+")"; //вот здесь в поля с ссылками сразу присваиваем нулевой ID вместо NULL
 data.qOperation.ExecSQL;
 data.qOperation.SQL.Text := "Select max(id) from obj_Blank";
 data.qOperation.Open;
 if data.qOperation.RecordCount > 0 then
   NewID := data.qOperation.Fields[0].AsInteger;
 data.qOperation.Close;
 data.qBlankList.Requery;
 if data.qBlankList.Locate("ID",NewID,[]) then
 begin
   //Делаем то что происходит при добавлении новой записи ... Но ошибки уже нет.
 end
 else
   ShowMessage("Не удалось создать новую анкету! ");
end;


 
prcoder   (2013-01-23 17:56) [16]

Если поставить CursorType=ctKeyset и LockType=ltOptimistic, то всё должно быть ок.


 
Кщд   (2013-01-24 10:05) [17]

>ixilimuse   (27.11.12 20:17) [15]
ни параметров, ни понимания, что такое многопользовательская работа



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2013.10.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.002 c
2-1359488655
Ghost del vonte
2013-01-29 23:44
2013.10.20
SMTP


11-1248519642
Ruzzz
2009-07-25 15:00
2013.10.20
EditBox, метод Add и св-во Caption


15-1367688703
brother
2013-05-04 21:31
2013.10.20
проблеммы GDI?


1-1316694379
samalex2504
2011-09-22 16:26
2013.10.20
В TDateTimePicker автоматический переход от дней к месяцу и году


2-1359545925
aka
2013-01-30 15:38
2013.10.20
Asm <--> машинный код





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский