|
|
|
Несколько вопросов по C++Builder6 и про работу ADO
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток! 1. Есть базка на MSSQL 2005. Там есть всякие разные сторки и т.д. они точно работают. 2. Нужно написать программку именно в С++Builder6. Что есть: Есть экземпляр TADOConnection, TStoredProc(ADOStoredProc1), TDataSource, TDBGrid. Если сторке в процессе выполнения программы сказать isActive=true, то всё отлично выполняется. Но для этого не требуется ни открыть соединение ничего, соответственно соединение открывается само. Вопросы: 1. На каком этапе оно закрывается? И закрывается ли? Не делая IsActive=true данные отобразить не удалось. 2. Можно ли это как-то сделать, т.к. мне интересно было бы выполнить несколько хранимых процедур в рамках одной транзакции, и для этого мне нужно открыть отдельное соединение и его ручками закрыть. 3. Возможно ли у строки в гриде как-то задать ID, который будет первичным ключом из выборки, полученной хранимыми процедурам? 4. Как просмотреть все поля возвращаемые сторкой, пробежаться по строкам, по столбцам, не отображая их в гриде? Вот такие 4 вопроса. Всем заранее спасибо!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2007, 12:47:58 |
|
||
|
Несколько вопросов по C++Builder6 и про работу ADO
|
|||
|---|---|---|---|
|
#18+
qwantorДоброго времени суток! 1. Есть базка на MSSQL 2005. Там есть всякие разные сторки и т.д. они точно работают. 2. Нужно написать программку именно в С++Builder6. Что есть: Есть экземпляр TADOConnection, TStoredProc(ADOStoredProc1), TDataSource, TDBGrid. Если сторке в процессе выполнения программы сказать isActive=true, то всё отлично выполняется. Но для этого не требуется ни открыть соединение ничего, соответственно соединение открывается само. Вопросы: 1. На каком этапе оно закрывается? И закрывается ли? Не делая IsActive=true данные отобразить не удалось. 2. Можно ли это как-то сделать, т.к. мне интересно было бы выполнить несколько хранимых процедур в рамках одной транзакции, и для этого мне нужно открыть отдельное соединение и его ручками закрыть. 3. Возможно ли у строки в гриде как-то задать ID, который будет первичным ключом из выборки, полученной хранимыми процедурам? 4. Как просмотреть все поля возвращаемые сторкой, пробежаться по строкам, по столбцам, не отображая их в гриде? Вот такие 4 вопроса. Всем заранее спасибо!!! 1. Код: plaintext 3. Опять же некоректный вопрос, как можно задать первичный ключь в гриде? Грид это всего лишь компонент который отображает данные. Для чего тебе это нужно, именно в приложении, объясни?! 4. Чем пробижатся? Вообще ничего не понял? такое впечатление, что у тебя были попытки поработать с ADO.NET, но ты их оставил и вернулся к старому доброму ADO:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2007, 16:34:14 |
|
||
|
Несколько вопросов по C++Builder6 и про работу ADO
|
|||
|---|---|---|---|
|
#18+
Tshamіl 2. Что значить выполнить несколько процедур в рамках одной транзакции? В MSSQL для каждой процедуры создается отдельная транзакция, если подробно то при входе в процедуру, грубо говоря, идет команда begin tran в конце процедуры выполняется команда comit tran или rolback tran в зависимости от того коректно отработала процедура или нет. Поэтому вопрос "Как выполнить процедуры в рамках одной транзакции" немного некоректен. Спасибо, незнал)) Tshamіl Опять же некоректный вопрос, как можно задать первичный ключь в гриде? Грид это всего лишь компонент который отображает данные. Для чего тебе это нужно, именно в приложении, объясни?! У меня первичный ключ GUID, который я нехочу отображать в гриде, но хотел бы, что бы по строке в гриде можно было бы узнать ключ из нужной мне таблицы в БД, который передаётся в сторке. Tshamіl 4. Чем пробижатся? Вообще ничего не понял? такое впечатление, что у тебя были попытки поработать с ADO.NET, но ты их оставил и вернулся к старому доброму ADO:) Почти в точку!!!))) Я работю с ADO.NET, и видимо им очень избалован)), но никогда не работал с ADO. В приложении мне нужно, напирмер, по ID пользователя узнать все его роли или есть ли у него некая роль, и соответсвенно мне совершенно не нужно их отображать, а нужно, как в ADO.NET пробидаться по коллекции DataRow в DataTable, или Select к DataTable сделать, потом сохранить куда-нибудь нужные записи. Вот как-то так. Что касается грида, то там должно быть как-то так: пользователь навододит мышкой, или щёлкает на строку в гриде, по этой строке определяется GUID строки в таблице, по этому GUID-y отображаются в другом гриде какие-то другие данные. Т.е. естественно не у строки грида первичный ключ, а где-то хранить ассоциацию строку и GUID из таблицы БД, было бы удобно, если бы это как-то можно было хранить в самом гриде. Есть ли такая возможность? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2007, 20:35:31 |
|
||
|
Несколько вопросов по C++Builder6 и про работу ADO
|
|||
|---|---|---|---|
|
#18+
qwantor Почти в точку!!!))) Я работю с ADO.NET, и видимо им очень избалован)), но никогда не работал с ADO. В приложении мне нужно, напирмер, по ID пользователя узнать все его роли или есть ли у него некая роль, и соответсвенно мне совершенно не нужно их отображать, а нужно, как в ADO.NET пробидаться по коллекции DataRow в DataTable, или Select к DataTable сделать, потом сохранить куда-нибудь нужные записи. Вот как-то так. Что касается грида, то там должно быть как-то так: пользователь навододит мышкой, или щёлкает на строку в гриде, по этой строке определяется GUID строки в таблице, по этому GUID-y отображаются в другом гриде какие-то другие данные. Т.е. естественно не у строки грида первичный ключ, а где-то хранить ассоциацию строку и GUID из таблицы БД, было бы удобно, если бы это как-то можно было хранить в самом гриде. Есть ли такая возможность? Сразу хочу сказать что ADO.NET концептуально отличается от ADO, в ADO работа идет напрямую с данными, поэтому сохранять нужные изменения можно лишь в самой бд. Вся логика должна быть реализована на сервере. Если я правильно понял то алгоритм решения твоей проблемы должен быть примерно таким: 1. Загрузить в грид всех пользователей. 2. В зависимости от выбранного пользователя сформировать запрос к серверу и получить все его роли.(сдесь я не уверен, что это именно то что тебе нужно) Если чесно с трудом понимаю твою задачу. непонятно для чего находить роли, а затем не отображая их сохранять? вообще я советовал бы прочесть вот эту статю http://www.sql.ru/articles/mssql/2005/122703ADO.shtml там конечно все написано на примерах с использованием Delphi, но разницы нет никакой т.к. компоненты всеравно теже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2007, 23:43:45 |
|
||
|
Несколько вопросов по C++Builder6 и про работу ADO
|
|||
|---|---|---|---|
|
#18+
qwantor 2. Можно ли это как-то сделать, т.к. мне интересно было бы выполнить несколько хранимых процедур в рамках одной транзакции, и для этого мне нужно открыть отдельное соединение и его ручками закрыть. Может быть имелось ввиду вот это? Код: plaintext 1. 2. 3. 4. 5. 6. 7. Вообще в блоке: BEGIN Можно поместить код TSQL и отправлять на сервак. END Удачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2007, 00:23:30 |
|
||
|
Несколько вопросов по C++Builder6 и про работу ADO
|
|||
|---|---|---|---|
|
#18+
Tshamіl 2. Что значить выполнить несколько процедур в рамках одной транзакции? В MSSQL для каждой процедуры создается отдельная транзакция, если подробно то при входе в процедуру, грубо говоря, идет команда begin tran в конце процедуры выполняется команда comit tran или rolback tran в зависимости от того коректно отработала процедура или нет.Неправда. По умолчанию каждая команда считается отдельной транзакцией. команды в процедуре тоже. Процедура не имеет никакой атомарности, если там нет begin tran ... commit ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2007, 01:52:32 |
|
||
|
Несколько вопросов по C++Builder6 и про работу ADO
|
|||
|---|---|---|---|
|
#18+
qwantor Что касается грида, то там должно быть как-то так: пользователь навододит мышкой, или щёлкает на строку в гриде, по этой строке определяется GUID строки в таблице, по этому GUID-y отображаются в другом гриде какие-то другие данные. Т.е. естественно не у строки грида первичный ключ, а где-то хранить ассоциацию строку и GUID из таблицы БД, было бы удобно, если бы это как-то можно было хранить в самом гриде. Есть ли такая возможность?Этот момент хорошо разруливается с помощью связанных датасетов, т.е. у подчинённого датасоурса выставляешь свойство MasterSource к родительскому датасету - и вуаля! ничё не надо сохранять, всё работает само ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2007, 10:39:07 |
|
||
|
Несколько вопросов по C++Builder6 и про работу ADO
|
|||
|---|---|---|---|
|
#18+
qwantor 2. Можно ли это как-то сделать, т.к. мне интересно было бы выполнить несколько хранимых процедур в рамках одной транзакции, и для этого мне нужно открыть отдельное соединение и его ручками закрыть. Да можно. По умолчанию ADO работает с процедурами и SQL коммандами в режиме autocommit. Чтобы выполнить несколько комманд или процедур в рамках одной транзакции надо явно начать транзакцию. Делается это с помощью TADOConnection.BeginTrans, завершение - TADOConnection.CommitTrans, откат TADOConnection.RollbackTrans. То есть что-то типо того: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2007, 11:49:36 |
|
||
|
Несколько вопросов по C++Builder6 и про работу ADO
|
|||
|---|---|---|---|
|
#18+
TshamіlЧто значить выполнить несколько процедур в рамках одной транзакции? В MSSQL для каждой процедуры создается отдельная транзакция, если подробно то при входе в процедуру, грубо говоря, идет команда begin tran в конце процедуры выполняется команда comit tran или rolback tran в зависимости от того коректно отработала процедура или нет. Полная чушь. P.S.: В моем предыдущем примере вызов Conn->BeginTrans() должен быть перед try, чтобы если в нем возникла ошибка не вызвался RollbackTrans() при неначатой транзакции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2007, 12:26:22 |
|
||
|
Несколько вопросов по C++Builder6 и про работу ADO
|
|||
|---|---|---|---|
|
#18+
Дикий Билл Tshamіl 2. Что значить выполнить несколько процедур в рамках одной транзакции? В MSSQL для каждой процедуры создается отдельная транзакция, если подробно то при входе в процедуру, грубо говоря, идет команда begin tran в конце процедуры выполняется команда comit tran или rolback tran в зависимости от того коректно отработала процедура или нет.Неправда. По умолчанию каждая команда считается отдельной транзакцией. команды в процедуре тоже. Процедура не имеет никакой атомарности, если там нет begin tran ... commit Я неправильно выразился, то что я написал, в посте, верно лишь для процедур в которых используется одна команда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2007, 14:08:20 |
|
||
|
Несколько вопросов по C++Builder6 и про работу ADO
|
|||
|---|---|---|---|
|
#18+
smskin TshamіlЧто значить выполнить несколько процедур в рамках одной транзакции? В MSSQL для каждой процедуры создается отдельная транзакция, если подробно то при входе в процедуру, грубо говоря, идет команда begin tran в конце процедуры выполняется команда comit tran или rolback tran в зависимости от того коректно отработала процедура или нет. Полная чушь. P.S.: В моем предыдущем примере вызов Conn->BeginTrans() должен быть перед try, чтобы если в нем возникла ошибка не вызвался RollbackTrans() при неначатой транзакции Ты уверен, что, если у тебя во второй процедуре произойдет ошибка, то все действия которые выполнила первая процедура будут отменены? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2007, 14:13:46 |
|
||
|
Несколько вопросов по C++Builder6 и про работу ADO
|
|||
|---|---|---|---|
|
#18+
TshamіlТы уверен, что, если у тебя во второй процедуре произойдет ошибка, то все действия которые выполнила первая процедура будут отменены? Да. Проверено опытом. Да и вобще, логически, какой смысл в транзакциях, если процедуры в них не участвуют? Если у них какие-то свои отдельные транзакции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2007, 14:29:31 |
|
||
|
Несколько вопросов по C++Builder6 и про работу ADO
|
|||
|---|---|---|---|
|
#18+
smskin В моем предыдущем примере вызов Conn->BeginTrans() должен быть перед try, чтобы если в нем возникла ошибка не вызвался RollbackTrans() при неначатой транзакции см. TADOConnection::InTransaction Код: plaintext 1. 2. 3. 4. "Helo, word!" - 17 errors 56 warnings Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2007, 16:47:54 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=266&tid=2027754]: |
0ms |
get settings: |
6ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
32ms |
get topic data: |
5ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 187ms |
| total: | 292ms |

| 0 / 0 |
