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

Вниз

Каким образом получить только что вставленную в таблицу базы?   Найти похожие ветки 

 
sniknik ©   (2006-06-21 16:21) [40]

> Объясните почему.
потому что без синхронизации нельзя из разных потоков даже с одной переменной работать изза возможных колизий, к обьекту VCL тем более нельзя. не знаю что там может случится, но чтото случится обязательно. (тут както обсуждалось изменение фонта лебела из потока вешало программу на 20 сек. одно! ... а у тебя множественные обращения)


 
Ega23 ©   (2006-06-21 16:29) [41]

Сорри. Я не так понял. Я почему-то решил, что одна итерация 6 сек выполняется. Оттого и прифигел....


 
AxelBlack ©   (2006-06-21 18:03) [42]


> sniknik ©   (21.06.06 16:21) [40]

Хм-м-м-м.
Я думал иначе.

ADOConnection это не переменная.
Я не до конца вижу участки памяти, которые не защищены от действия множества сторонних потоков (в данном случае!). ADOConnection (в данном случае) используется только для соединения с сервером.
Возможно я ошибаюсь, где-то или везде. Если поправите меня и поясните, буду признателен.

>потому что без синхронизации нельзя из разных потоков даже с одной переменной работать изза возможных колизий, к обьекту VCL тем более нельзя.
В случае VCL, в приложении существует главный thread, который принимает сообщения, адресованные всем компонентам, которыми владеет форма. И если мы вызываем методы какого-либо компонента формы, то достаточно использовать метод потока Synchronize с вызовом необходимого метода, без дополнительных мероприятий по синхронизации.


 
Ega23 ©   (2006-06-21 18:10) [43]

Если через Synchronize и критические секции - то нафига тогда в разных потоках обращение делать?


 
sniknik ©   (2006-06-21 18:22) [44]

> то достаточно использовать метод потока Synchronize с вызовом необходимого метода,
> без дополнительных мероприятий по синхронизации.
а что по твоему метод потока Synchronize делает? именно эти дополнительные мероприятия...
ну ладно..., и???? ты использовал? как ты себе вообще это представляеш/сделал? в случае с одним TADOConnection (где? на главной форме/датамодуле?) и кучей TADOCommand/DataSet в разных потоках на него завязанных, каждое выполнение синхронизировал?
ну тоды поздравляю, у тебя все выполнялось в одном потоке, главном, а сами потоки служили лиш для усложнения программинга и расхода времени на взаимодействие/синхронизацию. (имитация бурной деятельности)
если же не делал то наверняка в какуюто коллизию "вляпался".

т.е. куда ни кинь все неправильно в этом случае.


 
AxelBlack ©   (2006-06-21 18:45) [45]


> sniknik ©   (21.06.06 18:22) [44]
> а что по твоему метод потока Synchronize делает? именно
> эти дополнительные мероприятия...
> ну ладно..., и???? ты использовал? как ты себе вообще это
> представляеш/сделал? в случае с одним TADOConnection (где?
>  на главной форме/датамодуле?) и кучей TADOCommand/DataSet
> в разных потоках на него завязанных, каждое выполнение синхронизировал?
>

Пожалуйста, не кричи. Давай спокойно обсудим.
На твой вопрос отвечу, что конечно же нет. Synchronize было упомянуто, т.к. мне показалось странным, что "изменение фонта лебела из потока вешало программу на 20 сек", впрочем, детали мне не известны и судить трудно.

Я еще раз повторюсь и сконцентрируюсь на том моменте, который мне кажется сомнительным и который я не до конца понимаю:

"ADOConnection это не переменная.
Я не до конца вижу участки памяти, которые не защищены от действия множества сторонних потоков (в данном случае!). ADOConnection (в данном случае) используется только для соединения с сервером.
Возможно я ошибаюсь, где-то или везде. Если поправите меня и поясните, буду признателен."

Какие в данном случае могут быть коллизии?

Спасибо.

ПС. В данном случае, при использовании Connection := fTestGetNextIDTestTable.ADOConnection на 20.000 вызовов имею несколько подобных сообщений:
Thread 2072: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server does not exist or access denied
.......
Thread 3408: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server does not exist or access denied


 
Ega23 ©   (2006-06-21 18:52) [46]


> ADOConnection (в данном случае) используется только для
> соединения с сервером.


Сколько у тебя коннектов с сервером? Или, если по-другому: сколько ProcessID есть на сервере в момент работы твоей программы?


 
AxelBlack ©   (2006-06-21 18:59) [47]


> ну тоды поздравляю, у тебя все выполнялось в одном потоке

Х-м-м-м....
Вот тут надумалось предположение, а не исполнялось ли все это в одном потоке (без использования Synchronize)?


 
AxelBlack ©   (2006-06-21 19:04) [48]


> Ega23 ©   (21.06.06 18:52) [46]

ADOConnection один, значит ProcessID - один.
Сейчас прогнать не могу - позднее скажу. Но почти уверен, что один.


 
Ega23 ©   (2006-06-21 19:07) [49]


> ADOConnection один, значит ProcessID - один.


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


 
AxelBlack ©   (2006-06-21 19:29) [50]


> Ega23 ©   (21.06.06 18:52) [46]
> Сколько у тебя коннектов с сервером? Или, если по-другому:
>  сколько ProcessID есть на сервере в момент работы твоей
> программы?

Гы.
В основном один.
Иногда появляется второй, еще реже появляется третий коннект.


 
sniknik ©   (2006-06-21 20:26) [51]

> Какие в данном случае могут быть коллизии?
какие угодно. это к разработчикам, у них исходные коды есть... а нам приходится довольствоватся тем, что в хелпе написано "так делать нельзя". точка.

> несколько подобных сообщений:
> Thread 2072: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server does not exist or access denied
вот это скорее всего проявление этих самых коллизий.

сделай правильно, с коннектом в каждом потоке и они исчезнут. (по хорошему еще coinitialize в потоке надо вызывать до создания ado компонент)
впрочем ты это уже сделал, второй (или вернее первый описаный) вариант утебя как раз с собственным конектом в каждом потоке. (только конект созданный через строку "неуправляемый" и вся разница)

>> ну тоды поздравляю, у тебя все выполнялось в одном потоке
> Х-м-м-м....
> Вот тут надумалось предположение, а не исполнялось ли все это в одном потоке (без использования Synchronize)?
тебе то чего думать? мое предположение было о твоем коде (потому и предполагал/описывал возможные варианты), а тебе предполагать зачем, просто в исходник посмотри...


 
Lex_! ©   (2006-06-22 09:10) [52]

Механизм не такой у меня например ... Тут одно приложение и один АдоКоннект, у меня приложение ISAPI и соответственно при например пяти запросах создается пять потоков (и пять экземпляров TAdoConnection) ... но это если пять ..
Хотя я что-то не туда уже.. :)


 
_MaSteR_NN_   (2006-06-23 11:34) [53]

Syntax
@@IDENTITY

Return Types
numeric

Examples
This example inserts a row into a table with an identity column and uses @@IDENTITY to display the identity value used in the new row.

INSERT INTO jobs (job_desc,min_lvl,max_lvl)
VALUES ("Accountant",12,125)
SELECT @@IDENTITY AS "Identity"



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

Текущий архив: 2006.09.03;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.062 c
2-1155386675
SamProf
2006-08-12 16:44
2006.09.03
Как получить handle фокусного объекта


3-1151495892
Ega23
2006-06-28 15:58
2006.09.03
Как узнать - Identity поле, или нет?


1-1153417479
Calibr2
2006-07-20 21:44
2006.09.03
Самоудаление


2-1155203741
Id
2006-08-10 13:55
2006.09.03
StringGrid


2-1155497031
Chort
2006-08-13 23:23
2006.09.03
ToolBar