Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / MFC & SQL / 13 сообщений из 13, страница 1 из 1
24.04.2007, 16:27
    #34484059
Oleg_2006
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MFC & SQL
Я использую MFC 6.0
C Пощью CAdodc, C_Recordset, CDataGrid я получаю и отображаю
результаты предложений SELECT.
Будте добры, подскажите, как в этой ситуации можно модифицировать
базу данных, например, послать на сервер предложение INSERT ....
Извините за примитивный вопрос.
...
Рейтинг: 0 / 0
25.04.2007, 10:03
    #34485351
vanoman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MFC & SQL
Для начала купить книжку под общим названием "Базы данных бла-бла-бла"
и поискать там
ALTER TABLE
Ещё одни вариант - пойти на соответствующий форум. Форум по СУБД
...
Рейтинг: 0 / 0
25.04.2007, 10:41
    #34485482
grieg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MFC & SQL
Мб вместо SELECT написать INSERT или UPDATE?
Ну то есть вы умеете выполнять SELECT. Значит, аналогично выдолжны мочь выполнять и остальные команды SQL. В чем сложность?
...
Рейтинг: 0 / 0
25.04.2007, 10:59
    #34485564
Oleg_2006
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MFC & SQL
Извините, синьер 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;
}
...
Рейтинг: 0 / 0
25.04.2007, 12:51
    #34486118
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MFC & SQL
такие «вумные» шняги обычно по-другому работают: ты меняешь данные в рекордсете, вызываешь ему апдейт, а он сам посылает на сервер нужные запросы. Если тебе нужен более низкоуровневый интерфейс к базе, хмм… хз, на чём там адо работает, на одбц?
...
Рейтинг: 0 / 0
25.04.2007, 16:12
    #34487023
Oleg_2006
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MFC & SQL
GRIEG, признателен за совет. Это не проходит, я пробовал.
Господин maXmo, результат селекта служит информацией для анализа,
последующая модификация может затронуть другой набор таблиц,
эту операцию порой трудно выполить тупым редактирование GRIDA.
С уважением Oleg_2006!
...
Рейтинг: 0 / 0
25.04.2007, 16:24
    #34487083
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MFC & SQL
Oleg_2006последующая модификация может затронуть другой набор таблиц,
эту операцию порой трудно выполить тупым редактирование GRIDA.ну. Вот этот другой набор таблиц (которые хочешь изменить) грузишь в рекордсет, меняешь то, что подгрузил, вызываешь апдейт – и оно уходит на сервер. Если тебе нужен более низкоуровневый интерфейс к базе в терминах подключение-запрос-результат, рекордсет тебе тут не помощник.
...
Рейтинг: 0 / 0
26.04.2007, 09:38
    #34488560
vanoman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MFC & SQL
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)
Вообще-то эти операции весьма нежелательны и требуют глубокого осмысления. Изменение структуры таблиц(ы) влечет за собой анализ вещей, называемых такими буквосочетаниями как:
Триггеры, Ссылочная целостность...и пр.
К чему я? Ежели Вы НЕ пишете среду разработчика для СУБД то, мне думается, что операция затрагивающая изменение структуры не должна присутствоавать в Приложении. Изменение - процесс Творческий и требует Анализа. Чего не может сделать бездушный алгоритм...

Возможно Вам следует изменить подход в работе с БД. Ещё раз Продумать структуру последней...
...
Рейтинг: 0 / 0
26.04.2007, 09:42
    #34488575
vanoman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MFC & SQL
А ежели вопрос стоит:
Как мне получить данные, изменить их и вновь записать изменения в БД.

Думаю стоит посмотреть справку о Режимах открытия курсора: Только чтение; Чтение и изменение.
...
Рейтинг: 0 / 0
26.04.2007, 09:47
    #34488587
Oleg_2006
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MFC & SQL
Уважаемый маэстро maXmo!
Я хорошо знаю, что между можно сделать и
реально сделать лежит глубокая пропость, которую в 99 случаях из
100 преодалеть не удается. У программистов - зубров я хотел бы получить
ответ (или ссылку,где поучится) на вопрос, как предложение DML или скрипт на PL SQL
можно передать в RUNTIME на выполнение. (язык С++)
С уважкеием, чайник.
...
Рейтинг: 0 / 0
26.04.2007, 09:57
    #34488615
vanoman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MFC & SQL
И №3
Коль зашёл разговор о "PL SQL" вы, думается, пользуете ORACLE

Настоятельно рекомендую обратить свой взор на библиотеку OCCI/OCI (в зависимости от версии ORACLE)

Эта библиотека работает с указанной СУБД "на прямую", а значит быстрее, значит предоставляет наибольшее кол-во рабочих инструментов и прочая, прочая, прочая...
...
Рейтинг: 0 / 0
26.04.2007, 10:09
    #34488660
vanoman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MFC & SQL
И последнее...
По нажатию на 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)"
...
Рейтинг: 0 / 0
26.04.2007, 10:11
    #34488671
vanoman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MFC & SQL
Видимо ему надо подсунуть строку
"Begin Create Table MyTable(id Number) End."
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / MFC & SQL / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]