|
|
|
ошибка в инструкции update при выполнении операций с dbf через ADO
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, люди добрые! Необходимо сравнить 2 файла с различной структурой (в одной урезаны некоторые поля) есть код: Set conn = New ADODB.Connection conn.ConnectionString = "DRIVER={Microsoft dBase Driver (*.dbf)};" & "DBQ=" & s & ";" & "DefaultDir=" & s & "\" conn.Open Set Rst = New ADODB.Recordset s3 = "SELECT * FROM " & s2 Rst.Open s3, conn, dbOpenStatic, adLockOptimistic Set conn2 = New ADODB.Connection conn2.ConnectionString = "DRIVER={Microsoft dBase Driver (*.dbf)};" & "DBQ=" & ss & ";" & "DefaultDir=" & ss & "\" conn2.Open Set rst2 = New ADODB.Recordset ss3 = "SELECT * FROM " & ss2 rst2.Open ss3, conn2 Do Until Rst.EOF s6 = Rst.Fields(0).Value Do Until rst2.EOF s7 = rst2.Fields(0).Value If s6 = s7 Then Rst.Fields(0).Value = "0" Rst.update End If rst2.MoveNext Loop Rst.MoveNext Loop Rst.Close: Set Rst = Nothing conn.Close: Set conn = Nothing rst2.Close: Set rst2 = Nothing conn2.Close: Set conn2 = Nothing после обработки первой записи, выдается runtime error (80004005): Ошибка синтаксиса в инструкции Update. По идее нужно запись удалить, но мне её обнулить хотя бы, чтобы потом запросом почистить строки, где поле с нулевым значением. Как исправить не знаю... Может что с кодом в целом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2008, 13:50 |
|
||
|
ошибка в инструкции update при выполнении операций с dbf через ADO
|
|||
|---|---|---|---|
|
#18+
1) зачем два объекта типа ADODB.Connection, можно использовать одно и сделать сразу update или delete 2) Rst.Fields(0).Value = "0" скорее всего ошибка здесь. Видать, надо каждое поле по отдельности обрабатывать (присваивать) I Have Nine Lives You Have One Only THINK! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2008, 14:28 |
|
||
|
ошибка в инструкции update при выполнении операций с dbf через ADO
|
|||
|---|---|---|---|
|
#18+
понятно почему два соединения, папки разные...тогда два конекшена надо что возвращает rstN.Fields(0).Value ? I Have Nine Lives You Have One Only THINK! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2008, 14:31 |
|
||
|
ошибка в инструкции update при выполнении операций с dbf через ADO
|
|||
|---|---|---|---|
|
#18+
DeViLsssss, Код: plaintext Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2008, 21:24 |
|
||
|
ошибка в инструкции update при выполнении операций с dbf через ADO
|
|||
|---|---|---|---|
|
#18+
проблема даже не в том, что он значения не меняет, а в том, что он обрабатывает только первую запись...вот... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2008, 12:04 |
|
||
|
ошибка в инструкции update при выполнении операций с dbf через ADO
|
|||
|---|---|---|---|
|
#18+
попробуй так Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2008, 14:09 |
|
||
|
ошибка в инструкции update при выполнении операций с dbf через ADO
|
|||
|---|---|---|---|
|
#18+
Шыфл, что оно делает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2008, 14:45 |
|
||
|
ошибка в инструкции update при выполнении операций с dbf через ADO
|
|||
|---|---|---|---|
|
#18+
В общем получилось у меня всё, но приходиться делать rst2.requery каждый раз. Поэтому процесс очень долгий. (база сравниваемая=от 5 MB, база-справочник = 65MB(и будет больше)) Вопрос встает: Как сделать быстрее? Может работать через индексы? Тогда как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2008, 14:50 |
|
||
|
ошибка в инструкции update при выполнении операций с dbf через ADO
|
|||
|---|---|---|---|
|
#18+
DeViLsssss (база сравниваемая=от 5 MB, база-справочник = 65MB(и будет больше)) Вопрос встает: Как сделать быстрее? Может работать через индексы? Тогда как? Если есть первичный ключ, то можно Код: plaintext 1. П.С.Написал бы ты обыкновенный SQL запрос а не мучался с курсором :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2008, 15:15 |
|
||
|
ошибка в инструкции update при выполнении операций с dbf через ADO
|
|||
|---|---|---|---|
|
#18+
А вообще, попробуй сменить провайдера на Microsoft.Jet.OLEDB.4.0 Что-то типа Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2008, 15:24 |
|
||
|
ошибка в инструкции update при выполнении операций с dbf через ADO
|
|||
|---|---|---|---|
|
#18+
Шыфл, друг! Вот серьёзно, делаю запрос, выдает runtime err 80004е005 Недостаточно параметров. Требуется 1. (это если "*" ставить) а если поля конкретные, то цифра = количеству полей. Может я что неправильно делаю? (sql-запрос делаю там, где rst.open) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2008, 07:18 |
|
||
|
ошибка в инструкции update при выполнении операций с dbf через ADO
|
|||
|---|---|---|---|
|
#18+
конкретно вот как: Set conn = New ADODB.Connection conn.ConnectionString = "DRIVER={Microsoft dBase Driver (*.dbf)};" & "DBQ=" & s & ";" & "DefaultDir=" & s & "\" conn.Open Set Rst = New ADODB.Recordset s3 = "SELECT * FROM " & s2 Rst.Open s3, conn, dbOpenStatic, adLockOptimistic Do Until Rst.EOF Set conn2 = New ADODB.Connection conn2.ConnectionString = "DRIVER={Microsoft dBase Driver (*.dbf)};" & "DBQ=" & ss & ";" & "DefaultDir=" & ss & "\" conn2.Open Set Rst2 = New ADODB.Recordset ss3 = "Update " & ss2 & " Set NUMBER=0 where NUMBER=" & Rst.Fields(0).Value Rst2.Open ss3, conn2 Rst2.Close: Set Rst2 = Nothing conn2.Close: Set conn2 = Nothing Rst.MoveNext Loop Rst.Close: Set Rst = Nothing conn.Close: Set conn = Nothing NUMBER= название изменяемого поля ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2008, 07:43 |
|
||
|
ошибка в инструкции update при выполнении операций с dbf через ADO
|
|||
|---|---|---|---|
|
#18+
попробовал так conn2.Execute "Update " & ss2 & " Set number=0 where number=" & Rst.Fields(0).Name пишет ошибку синтаксиса в инструкции "update" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2008, 08:18 |
|
||
|
ошибка в инструкции update при выполнении операций с dbf через ADO
|
|||
|---|---|---|---|
|
#18+
в предыдущем посте ошибка. там rst.fields(0).Value думал что с типами данных, преобразовал всё в число через val(). требует параметр. Что делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2008, 08:45 |
|
||
|
ошибка в инструкции update при выполнении операций с dbf через ADO
|
|||
|---|---|---|---|
|
#18+
Сделал так: Set conn = New ADODB.Connection conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & s & ";Extended Properties=dBASE IV;User ID=Admin;Password=;" conn.Open Set rst = New ADODB.Recordset s3 = "SELECT * FROM " & s2 rst.Open s3, conn, dbOpenStatic, adLockOptimistic Set conn2 = New ADODB.Connection conn2.Provider = "Microsoft.Jet.OLEDB.4.0" conn2.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ss & ";Extended Properties=dBASE IV;User ID=Admin;Password=;" conn2.Open Set rst2 = New ADODB.Recordset ss3 = "SELECT * FROM " & ss2 rst2.Open ss3, conn2 ' , dbOpenStatic, adLockOptimistic Do Until rst.EOF s6 = Val(rst.Fields(0)) Do Until rst2.EOF s7 = Val(rst2.Fields(0)) If s6 = s7 Then rst.Delete rst.Update GoTo 1 Else rst2.MoveNext End If Loop 1: rst2.Requery rst.MoveNext Loop rst2.Close: Set rst2 = Nothing conn2.Close: Set conn2 = Nothing rst.Close: Set rst = Nothing conn.Close: Set conn = Nothing работает. 226 записей за 22 минуты. Вопрос: Можно ли ускорить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2008, 10:55 |
|
||
|
ошибка в инструкции update при выполнении операций с dbf через ADO
|
|||
|---|---|---|---|
|
#18+
А можно как-нибудь запрограммить так, чтобы создавался индекс большого файла, и программа использовала его? Ведь сравнивается, только одно поле... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2008, 11:30 |
|
||
|
ошибка в инструкции update при выполнении операций с dbf через ADO
|
|||
|---|---|---|---|
|
#18+
а если так ? Код: 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. 32. 33. 34. 35. 36. 37. 38. 39. 40. а по поводу кода, приведенного Вами, зачем делать каждый раз Requery? Да и обновление можно сделать скопом, если использовать ключ adLockBatchOptimistic I Have Nine Lives You Have One Only THINK! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2008, 13:18 |
|
||
|
ошибка в инструкции update при выполнении операций с dbf через ADO
|
|||
|---|---|---|---|
|
#18+
а если файлы в одной директории, то, вероятно, можно будет одним SQL-запросом удалить ненужные строки I Have Nine Lives You Have One Only THINK! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2008, 13:23 |
|
||
|
ошибка в инструкции update при выполнении операций с dbf через ADO
|
|||
|---|---|---|---|
|
#18+
пробовал код, приведенный выше. Не проходит из за длины получившейся строки(там 7-8 значные номера). Юзаю adlockbatch, выдает runtime 80004е15. Работа не выполнена (курсор на выполнении удаления записи). Пробую дальше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2008, 14:41 |
|
||
|
ошибка в инструкции update при выполнении операций с dbf через ADO
|
|||
|---|---|---|---|
|
#18+
запросы у меня не получаются....а жаль(((((((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2008, 14:42 |
|
||
|
ошибка в инструкции update при выполнении операций с dbf через ADO
|
|||
|---|---|---|---|
|
#18+
авторпробовал код, приведенный выше. Не проходит из за длины получившейся строки(там 7-8 значные номера). автор 226 записей вообще-то в string очень много символов влезет сколько вообще записей? авторзапросы у меня не получаются....а жаль(((((((( что значит не получается? ошибка, проблема с синтаксисом или что? I Have Nine Lives You Have One Only THINK! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2008, 16:06 |
|
||
|
ошибка в инструкции update при выполнении операций с dbf через ADO
|
|||
|---|---|---|---|
|
#18+
DeViLsssss, c синтаксисом мы тебе поможем :) Ты их в одну папочку положи, в тестовую, для простоты s . И сделай следующее Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Или сразу Код: plaintext 1. 2. И посмотри, что получилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2008, 17:05 |
|
||
|
ошибка в инструкции update при выполнении операций с dbf через ADO
|
|||
|---|---|---|---|
|
#18+
Шыфл, Спасибо тебе огромное! Теперь я хоть понял как это делать! Вроде сделал! Проверяю! О результатах позже... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2008, 07:36 |
|
||
|
ошибка в инструкции update при выполнении операций с dbf через ADO
|
|||
|---|---|---|---|
|
#18+
ШыфлDeViLsssss, c синтаксисом мы тебе поможем :) Ты их в одну папочку положи, в тестовую, для простоты s . И сделай следующее Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Или сразу Код: plaintext 1. 2. И посмотри, что получилось. запрос можно проще сделать, inner join лишний как в ОБНОВЛЕНИИ, так и в УДАЛЕНИИ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2008, 08:04 |
|
||
|
ошибка в инструкции update при выполнении операций с dbf через ADO
|
|||
|---|---|---|---|
|
#18+
Шыфл, не подскажешь, где найти литературу по sql в visual basice. не получается вот что: conn4.Execute "select [city].* from [city] where [city].[index]=" & Str(s) пишет, что не хватает параметра. а какого не пойму... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2008, 08:08 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=35733930&tid=2161469]: |
0ms |
get settings: |
6ms |
get forum list: |
16ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
52ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 196ms |
| total: | 339ms |

| 0 / 0 |
