|
|
|
CRecordset - изменение значений полей
|
|||
|---|---|---|---|
|
#18+
Возможно ли изменение данных конкретного поля в таблице без применения механизма RFX? (используются классы CDatabase и CRecordset в VC++) То есть без необходимости создавать класс-потомок от CRecordset. P.S. Использование запроса UPDATE - не подходит. Нужно что-то вроде функции SetFieldValue класса CDaoRecordset. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2003, 12:01 |
|
||
|
CRecordset - изменение значений полей
|
|||
|---|---|---|---|
|
#18+
Неа... Цитата из хэлпа на CRecordset:: Get FieldValue(): Note Unlike the DAO class CDaoRecordset, CRecordset does not have a SetFieldValue member function. If you create an object directly from CRecordset, it is effectively read-only. В CRecordset::Update() используется SQLSetPos(), когда не SQL-выражение UPDATE. А чем тебя не устраивает UPDATE, если не секрет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2003, 12:47 |
|
||
|
CRecordset - изменение значений полей
|
|||
|---|---|---|---|
|
#18+
UPDATE не подходит, так как мне нужно изменять данные в конкретной записи, в таблице нету поля с уникальным номером записи. Короче - ключа нет... Тогда как задать нужную запись в условии WHERE при запросе на обновление? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2003, 14:10 |
|
||
|
CRecordset - изменение значений полей
|
|||
|---|---|---|---|
|
#18+
Жаль, что нет никакого ключа. Как же ты попадаешь на нужную запись? База у тебя какая? Access? Если посмотреть, что делает CRecordset::Update(), то видно, что он обновляет текущую запись одним из двух способов: или функцией SQLSetPos(), или SQL-выражением типа "UPDATE ... WHERE CURRENT OF <имя курсора>". Я ни того ни другого не делал, и не уверен что второй пройдёт на Access(97). И ещё вопрос: чем тебя не устраивает породить класс от CRecordset и использовать RFX? Я подозреваю, что его можно приспособить к твоим целям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2003, 17:12 |
|
||
|
CRecordset - изменение значений полей
|
|||
|---|---|---|---|
|
#18+
Поторопился. На Access2000 как раз используется WHERE CURRENT OF, примерно так: UPDATE t SET [F1]=?,[F2]=? WHERE CURRENT OF SQL_CUR00dfb410; Имя курсора достаётся функцией SQLGetCursorName(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2003, 17:21 |
|
||
|
CRecordset - изменение значений полей
|
|||
|---|---|---|---|
|
#18+
База действительно Аксессовская. А вот про такое условие "WHERE CURRENT OF" я не знал, признаюсь!... Спасибо большое за подсказку. Я думал, что если я через запрос буду делать, то как задам нужное поле, если нет уникального. Оказывается можно обновить текущее. Как находится нужная запись? Путем перемещения по таблице (хотя пока еще не реализовал :) А почему не подходит RFX? - просто я не могу знать точно, какие поля попадут ко мне из выборки (универсальная задача такая получается) и поэтому нет возможности связать конкретное поле с конкретной переменной. Еще раз спасибо за совет, ОйВэй! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2003, 23:10 |
|
||
|
CRecordset - изменение значений полей
|
|||
|---|---|---|---|
|
#18+
Рад был помочь, harinag! Тем не менее напишу ещё совет. Список имён полей у тебя всё-таки на момент выполнения должен быть, правда? Тогда довольно просто занести эти имена в массив, а в параллельный массив (а ещё лучше в CMap с ключом-именем поля) -- переменные, которые будут принимать/передавать значения этих полей. А в DoFieldExchange вставить цикл по этим массивам. У нас в фирме эта "универсальная задача" решена именно так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2003, 14:24 |
|
||
|
CRecordset - изменение значений полей
|
|||
|---|---|---|---|
|
#18+
Вопрос в тему. Только вот я использую не Access , а Oracle. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. На команде testdata.Update(); вылетает и пишет ошибку ORA-00911 Которая гласит: ORA-00911 invalid character Cause: Special characters are valid only in certain places. If special characters other than $, _, and # are used in a name and the name is not enclosed in double quotation marks (”), this message will be issued. One exception to this rule is for database names; in this case, double quotes are stripped out and ignored. Action: Remove the invalid character from the statement or enclose the object name in double quotation marks. Где этот символ мне понятно. Может этот запрос мешает , который выбирал данные из таблицы ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2004, 16:04 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32350714&tid=2034506]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 222ms |
| total: | 332ms |

| 0 / 0 |
