Форум: "Начинающим";
Текущий архив: 2007.01.21;
Скачать: [xml.tar.bz2];
ВнизКуда пропадает значение счетчика? Найти похожие ветки
← →
allrussia © (2006-12-24 11:58) [0]Создаю таблицу
"CREATE TABLE TableName (ID COUNTER PRIMARY KEY, COL_MAN TEXT (255))"
вставляю записи
for i:=0 to 10 do
begin
Table1.Insert;
Table1.FieldByName("COL_MAN").AsString:= s [i];
Table1.Post;
end;
все, далее жму кнопку:
Table1.recordno:=5;
Showmessage(Table1.FieldByName("COL_MAN").AsString)
- работает
жму другую кнопку
Table1.recordno:=5;
Showmessage(Table1.FieldByName("ID").AsString)
- НЕ работает!!!???
Все время показывает 0 (должно быть показание счетчика, в данном примере 5).
Самое интересное, если таблицу закрыть, и открыть заново, все фурычит.
Но самое смешное, то что я торможу цикл добавления записей показом сообщения допустим где-то в середине
for i:=0 to 10 do
begin
if i = 5 then ShowMessage ("");
Table1.Insert;
Table1.FieldByName("COL_MAN").AsString:= s [i];
Table1.Post;
end;
...копирую в этот момент файл базы в другое место, открываю ее в Access и вижу, что все записи колонки ID имеют свои номера, какими они и должны быть. Баг или brain.sys?
← →
tesseract © (2006-12-24 12:37) [1]после цикла вызови refresh или UpdateRecord.
← →
allrussia © (2006-12-24 12:53) [2]tesseract
Table1.Refresh - ошибка Key value for this row was changed or deleted at the data store.
Table1.UpdateRecord - ошибка Dataset is not in Edit or InsertMode;
пробовал
Table1.edit;
Table1.UpdateRecord; - результат - 0
и в цикл вставлял - 0
и refresh в цикл вставлял try Table1.Refresh except end; - вообще все записи пустыми становятся
после цикла
забыл сказать, мне во время цикла желательно (нужно) получать значение поля id
← →
sniknik © (2006-12-24 13:29) [3]авто инкрементное значение должно обновляться само после добавления записи... (это значение по умолчанию Properties["Update Resync"].Value = adResyncAutoIncrement) при этом значении после Post (insert) делается SELECT @@Identity.
если этого не происходит... ну возможно несколько вариантов
1 поле (тип) в запросе не определилось как автоинкремент.
2 "сбито"/установлено значение "Update Resync" на adResyncNone например
3 Post не вызывает записи(insert) в таблицу, изза установки режима отложенных изменений.
4 чтото еще. (т.к. используется Table а не нормальные для ADO компоненты (а возможно и коннект не использован, что часто у тех кто пользует Table), то это может быть что угодно, и с чем разбираться ну совершенно неохота)
← →
allrussia © (2006-12-24 13:45) [4]sniknik
Table1.Properties["Update Resync"].Value:="adResyncAutoIncrement" ?
ошибка - Applcation uses a value of the wrong type for the current operation...
1 поле (тип) в запросе не определилось как автоинкремент.
как это проверить?
2 "сбито"/установлено значение "Update Resync" на adResyncNone например
как проверить, исправить
3 Post не вызывает записи(insert) в таблицу, изза установки режима отложенных изменений.
аналогично 1, 2
4 чтото еще. (т.к. используется Table а не нормальные для ADO компоненты
Не подскажете название нормальных компонент плз. А здесь используется TADOTable.
пока проблема в силе
← →
Anatoly Podgoretsky © (2006-12-24 13:56) [5]> allrussia (24.12.2006 13:45:04) [4]
TAdoDataset
← →
allrussia © (2006-12-24 14:01) [6]TAdoDataset
а все компоненты из закладки ADO и используются+ ADOXCatalog из Activex
← →
sniknik © (2006-12-24 14:02) [7]> ошибка - Applcation uses a value of the wrong type for the current operation...
и где ты увидел у меня строку? все что я говорю, понимай буквально плз. иначе и разговаривать не зачем. (не, я могу конечно и ошибиться... но это случается гораздо реже чем вы извращаете мои слова)
и где у меня сказано что нужно чтото присваивать? это значение по умолчанию. т.е. уже стоит если не менял не сбил.
> Не подскажете название нормальных компонент плз.
TADOTable, TADOQuery, TADOstoredProc вот это "ненормальные", избавься от них, снятием с палитры, чтоб глаза не мозолили, оставшееся используй.
← →
sniknik © (2006-12-24 14:04) [8]> а все компоненты из закладки ADO и используются+ ADOXCatalog из Activex
все не надо, надо только нужное.
← →
allrussia © (2006-12-24 14:21) [9]sniknik
иначе и разговаривать не зачем.
новичковская же конференция :(
не хотите отвечать - не стоит ругаться
избавься от них, снятием с палитры, чтоб глаза не мозолили, оставшееся используй.
ок избавился,
оставил ADOConnection, ADOXCayalog, ADOCommand
что теперь использовать вместо TADOTable
кстати
вы писали 3 Post не вызывает записи(insert) в таблицу, изза установки режима отложенных изменений.
но тем не менее засиси поля COL_MAN доступны сразу же после .Post
← →
sniknik © (2006-12-24 14:42) [10]> не хотите отвечать - не стоит ругаться
это не ругань это факт. при совете "возьми А", ответ "ок,я взял Б, что дальше?/сделал Б", ??? дальнейшее бессмысленно т.к. предполагается "тебе сказали взять А", "а какая разница?/ну а я взял Б не подскажете то что я хочу для него/...", в итоге флейм, и что угодно только не то что нужно.
> что теперь использовать вместо TADOTable
уже сказали, нового добавить нечего. (кстати похоже. см. абзац выше)
> вы писали 3 Post не вызывает записи(insert) в таблицу, изза установки режима отложенных изменений.
> но тем не менее засиси поля COL_MAN доступны сразу же после .Post
записи COL_MAN вносятся на клиенте в клиентский же рекордсет, чего бы им быть недоступными? а автоинкремент получается только с сервера. (+ возможно всякие расчетные/дефаултные на сервере поля, либо присоединенные из других таблиц. но для этого уже используется другое значение для "Update Resync")
← →
allrussia © (2006-12-24 14:53) [11]sniknik
а автоинкремент получается только с сервера.
огромный сенькс за наводку!!
ADOTable1.CursorLocation присвоил clUseServer - и все заработало как надо.
если это ничем не грозит (?) то проблема решена!
← →
Anatoly Podgoretsky © (2006-12-24 15:18) [12]> allrussia (24.12.2006 14:21:09) [9]
Зачем же ты убрал TAdoDataset?
← →
sniknik © (2006-12-24 15:21) [13]clUseServer это просто отличный от клиентского режим работы, автоинкремент должен получаться в обоих.
> если это ничем не грозит (?)
грозит, еще как грозит, т.к. ADOTable1. ну и судя по всему дальнейший разговор смысла не имеет.
← →
Anatoly Podgoretsky © (2006-12-24 15:24) [14]> allrussia (24.12.2006 14:53:11) [11]
Убери ТADOTable или разговаривать не о чем, не хочешь твое дело, но не жалуйся ни на что, ты сам выбрал свой путь.
← →
Anatoly Podgoretsky © (2006-12-24 15:27) [15]
> ну и судя по всему дальнейший разговор смысла не имеет.
Не из-за AdoTable, а из-за знаний 0, а упорства мax и слушать других не хочет.
← →
allrussia © (2006-12-24 16:11) [16]вы оба поспешные выводы делаете: мне то как раз все равно что использовать, главное чтобы работало
еще в [9] убрал ADOTable и как понял надо вместо него использовать ADODataSet
тогда проект не работает, например у ADODataSet нет свойства TableName
и все - гаплык :(
Естесственно я еще попробую разобраться, ведь с выводами спешить не стоит
← →
sniknik © (2006-12-24 17:22) [17]> вы оба поспешные выводы делаете:
выводы делаются по показанному, а не по тому, что у тебя там на самом деле, никто у тебя за спиной не стоит и этого не видит.
> мне то как раз все равно что использовать, главное чтобы работало
тогда используй стороннего грамотного программиста...
> например у ADODataSet нет свойства TableName и все - гаплык :(
и это правильно, т.к. его (имени таблицы, да и самой таблици) на самом деле на клиенте нет, а ADOTable тебя обманывает (не только в этом) в чем и причина нежелательности его использования (его и остальных упомянутых), там "подгон" под другую логику.
(вот ты бы стал учится ездить на машине если бы на ней скорость показывалась по таблице соответствий типа если 10км/ч. то это на самом деле значит 100, а если 15 то это значит стоим и тд., а переключение передач зависело от дней недели, в понедельник переключение на первую означает вторую, во вторник заднюю, и т.д. утрированно конечно, но... ну, а объяснять как ездить на будеш после? когда уже разобрался во всех этих извращениях и понял, что единственное достойное место этой машины на свалке, а никак не на трассе. и что как думаешь имеет тут смысл объяснять, как ездить или как извратиться чтобы вот именно оно "завелось"?)
> Естесственно я еще попробую разобраться, ведь с выводами спешить не стоит
никто не спешит, тебе не один раз "давали шанс"/объясняли правильную позицию, просто с какогото момента перестанут... (после окончательного вывода) если так и будеш на "неправильных" компонентах свои проблемы показывать... (зачем повторяться, сказали же, и не раз, что смена компонента/логики большинство их(проблем) решит, не поменял сам виноват. количество повторов ограничено.)
← →
allrussia © (2006-12-28 00:29) [18]sniknik, Anatoly Podgoretsky
не помогло, увы, те же грабли с ADODataSet
если курсор ставишь на clUseServer то все ОК
Table1.Properties["Update Resync"].Value:=adResyncAutoIncrement
тоже не момогает
вроде бы здесь и остановиться и использовать clUseServer
но возник такой интересный момент, когда clUseServer метод locate работает очень медленно (в 5-10 раз медленнее clUseClient), зато очень быстро добавляются записи (раз в пять быстрее)
пока остановился на clUseClient а проблему решил созданием спецзаписи, из которой при добавлении новой записи берется инкремент
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.01.21;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.045 c