Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.21;
Скачать: CL | DM;

Вниз

Куда пропадает значение счетчика?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.044 c
15-1167125862
VitV
2006-12-26 12:37
2007.01.21
Настройка доступа в ХР


2-1167831429
AlexanderMS
2007-01-03 16:37
2007.01.21
Спеллер Word а для нужд программы.


11-1144418740
Maloric
2006-04-07 18:05
2007.01.21
ListView высота строк


15-1167081702
IMHO
2006-12-26 00:21
2007.01.21
Об убийстве ветки "Москва, 1941-й год..."


3-1162386352
FBuilder
2006-11-01 16:05
2007.01.21
MySQL + Delphi через DBExpress