|
|
|
MFC & SQL
|
|||
|---|---|---|---|
|
#18+
Я использую MFC 6.0 C Пощью CAdodc, C_Recordset, CDataGrid я получаю и отображаю результаты предложений SELECT. Будте добры, подскажите, как в этой ситуации можно модифицировать базу данных, например, послать на сервер предложение INSERT .... Извините за примитивный вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2007, 16:27 |
|
||
|
MFC & SQL
|
|||
|---|---|---|---|
|
#18+
Для начала купить книжку под общим названием "Базы данных бла-бла-бла" и поискать там ALTER TABLE Ещё одни вариант - пойти на соответствующий форум. Форум по СУБД ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2007, 10:03 |
|
||
|
MFC & SQL
|
|||
|---|---|---|---|
|
#18+
Мб вместо SELECT написать INSERT или UPDATE? Ну то есть вы умеете выполнять SELECT. Значит, аналогично выдолжны мочь выполнять и остальные команды SQL. В чем сложность? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2007, 10:41 |
|
||
|
MFC & SQL
|
|||
|---|---|---|---|
|
#18+
Извините, синьер Vanoma, вероятно я мутно сформулировал вопрос. У меня есть прог. язык С++, среда MFC Я динамически формирую Select. Анализ результата селекта формирует предложение DML или скрипт на PL SQL . Я не могу передать его на исполнение. Select я добываю так: int CBSLView::GetSelect( char *pS) { // C_Recordset m_cr; // CAdodc m_ca; // CDataGrid m_cdg; // AfxMessageBox(pS); ::SetCursor(HWait); m_ca.SetRecordSource(pS); m_ca.Refresh(); m_ca.UpdateData(); m_cr=m_ca.GetRecordset(); long Nrec=m_cr.GetRecordCount(); ::SetCursor(HArrow); sprintf(Buf,"GetSelect Количество строк= %d",Nrec); AfxMessageBox(Buf); return (int)Nrec; } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2007, 10:59 |
|
||
|
MFC & SQL
|
|||
|---|---|---|---|
|
#18+
такие «вумные» шняги обычно по-другому работают: ты меняешь данные в рекордсете, вызываешь ему апдейт, а он сам посылает на сервер нужные запросы. Если тебе нужен более низкоуровневый интерфейс к базе, хмм… хз, на чём там адо работает, на одбц? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2007, 12:51 |
|
||
|
MFC & SQL
|
|||
|---|---|---|---|
|
#18+
GRIEG, признателен за совет. Это не проходит, я пробовал. Господин maXmo, результат селекта служит информацией для анализа, последующая модификация может затронуть другой набор таблиц, эту операцию порой трудно выполить тупым редактирование GRIDA. С уважением Oleg_2006! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2007, 16:12 |
|
||
|
MFC & SQL
|
|||
|---|---|---|---|
|
#18+
Oleg_2006последующая модификация может затронуть другой набор таблиц, эту операцию порой трудно выполить тупым редактирование GRIDA.ну. Вот этот другой набор таблиц (которые хочешь изменить) грузишь в рекордсет, меняешь то, что подгрузил, вызываешь апдейт – и оно уходит на сервер. Если тебе нужен более низкоуровневый интерфейс к базе в терминах подключение-запрос-результат, рекордсет тебе тут не помощник. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2007, 16:24 |
|
||
|
MFC & SQL
|
|||
|---|---|---|---|
|
#18+
Oleg_2006Я использую MFC 6.0 C Пощью CAdodc, C_Recordset, CDataGrid я получаю и отображаю результаты предложений SELECT. Будте добры, подскажите, как в этой ситуации можно модифицировать базу данных, например, послать на сервер предложение INSERT .... Извините за примитивный вопрос. Oleg_2006 Извините, синьер Vanoma, вероятно я мутно сформулировал вопрос. У меня есть прог. язык С++, среда MFC Я динамически формирую Select. Анализ результата селекта формирует предложение DML или скрипт на PL SQL . Я не могу передать его на исполнение. Select я добываю так: int CBSLView::GetSelect( char *pS) { // C_Recordset m_cr; // CAdodc m_ca; // CDataGrid m_cdg; // AfxMessageBox(pS); ::SetCursor(HWait); m_ca.SetRecordSource(pS); m_ca.Refresh(); m_ca.UpdateData(); m_cr=m_ca.GetRecordset(); long Nrec=m_cr.GetRecordCount(); ::SetCursor(HArrow); sprintf(Buf,"GetSelect Количество строк= %d",Nrec); AfxMessageBox(Buf); return (int)Nrec; } Или я чего-то непонимаю или ... Короче. Изменение Чего Вы желаете произвести? Структуры таблиц? Тогда см. ALTER TABLE/ CREATE TABLE Кол-во колонок в выборке? Надо изменить поля выводимые в запрос. Заострить внимание я хочу на варианте №1 (ALTER TABLE/ CREATE TABLE) Вообще-то эти операции весьма нежелательны и требуют глубокого осмысления. Изменение структуры таблиц(ы) влечет за собой анализ вещей, называемых такими буквосочетаниями как: Триггеры, Ссылочная целостность...и пр. К чему я? Ежели Вы НЕ пишете среду разработчика для СУБД то, мне думается, что операция затрагивающая изменение структуры не должна присутствоавать в Приложении. Изменение - процесс Творческий и требует Анализа. Чего не может сделать бездушный алгоритм... Возможно Вам следует изменить подход в работе с БД. Ещё раз Продумать структуру последней... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2007, 09:38 |
|
||
|
MFC & SQL
|
|||
|---|---|---|---|
|
#18+
А ежели вопрос стоит: Как мне получить данные, изменить их и вновь записать изменения в БД. Думаю стоит посмотреть справку о Режимах открытия курсора: Только чтение; Чтение и изменение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2007, 09:42 |
|
||
|
MFC & SQL
|
|||
|---|---|---|---|
|
#18+
Уважаемый маэстро maXmo! Я хорошо знаю, что между можно сделать и реально сделать лежит глубокая пропость, которую в 99 случаях из 100 преодалеть не удается. У программистов - зубров я хотел бы получить ответ (или ссылку,где поучится) на вопрос, как предложение DML или скрипт на PL SQL можно передать в RUNTIME на выполнение. (язык С++) С уважкеием, чайник. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2007, 09:47 |
|
||
|
MFC & SQL
|
|||
|---|---|---|---|
|
#18+
И №3 Коль зашёл разговор о "PL SQL" вы, думается, пользуете ORACLE Настоятельно рекомендую обратить свой взор на библиотеку OCCI/OCI (в зависимости от версии ORACLE) Эта библиотека работает с указанной СУБД "на прямую", а значит быстрее, значит предоставляет наибольшее кол-во рабочих инструментов и прочая, прочая, прочая... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2007, 09:57 |
|
||
|
MFC & SQL
|
|||
|---|---|---|---|
|
#18+
И последнее... По нажатию на F1 + "ADO" вылазит статейка "Command Object" в которой MSDN вещает Execute Method Use the Execute method of the Command object to execute a query, data definition command, or stored procedure. The syntax is: Set rs = cmd.Execute(NumRecords, Parameters, Options) The variable rs is the returned Recordset object, and the parameters are optional. The NumRecords parameter specifies the number of rows returned; Parameters is a variant that specifies initial input parameter values; and Options specifies the type of query (in the form of a CommandTypeEnum constant), if known, to optimize processing. Command Type Options Command type options are specified in the CommandType property. A command can be a standard SQL data manipulation language statement, such as SELECT, INSERT, UPDATE, or DELETE, or any data definition language statement, such as CREATE or DROP. A command can also be the name of a stored procedure or table. The CommandType property has the following values. CommandTypeEnum Constant Query String adCmdFile File name of a persistently stored Recordset object adCmdStoreProc Stored procedure adCmdTable Table name adCmdTableDirect Table name whose columns are all returned adCmdText SQL statement adCmdUnknown Contents of the command are not known (default) adCmdUnspecified Unspecified command type argument Видимо ему надо подсунуть строку "Begin Create Table MyTable(id Number)" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2007, 10:09 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34488560&tid=2028973]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
163ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 254ms |
| total: | 496ms |

| 0 / 0 |
