Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Косяк при выборке из двух DBF-файлов / 25 сообщений из 27, страница 1 из 2
28.05.2010, 09:53
    #36654630
Gaiver23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк при выборке из двух DBF-файлов
Бьюсь уже не один день, есть такой код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Dim strConn As String
strConn = "DBQ=" & App.Path & ";Driver={Microsoft dBase Driver (*.dbf)}; FIL=dBase4.0"
conn.ConnectionString = strConn
conn.Open conn.ConnectionString
Dim sSQL As String
sSQL = "SELECT namefile FROM FTPNEW WHERE namefile Not In (Select namefile FROM FTPOLD)"
rs.Open sSQL, conn, adOpenStatic, adLockOptimistic
Вылетает сообщение об ошибке: [Microsoft][Драйвер ODBC dBase] Слишком мало параметров. Требуется 1.

Аналогичный код в MS ACCESS работает без проблем:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Dim strConn As String
Dim strPath As String
strPath = "C:\MYPROG"
strConn = "DBQ=" & strPath & ";Driver={Microsoft dBase Driver (*.dbf)}; FIL=dBase4.0"
conn.ConnectionString = strConn
conn.Open conn.ConnectionString
Dim sSQL As String
sSQL = "SELECT namefile FROM FTPNEW WHERE namefile Not In (Select namefile FROM FTPOLD)"
rs.Open sSQL, conn, adOpenStatic, adLockOptimistic
...
Рейтинг: 0 / 0
28.05.2010, 10:03
    #36654645
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк при выборке из двух DBF-файлов
Gaiver23,
Повторный постинг запрещен правилами.
...
Рейтинг: 0 / 0
28.05.2010, 10:05
    #36654649
Gaiver23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк при выборке из двух DBF-файлов
Shocker.ProGaiver23,
Повторный постинг запрещен правилами.

Это не повторный постинг. Теперь точно известно, что причина ошибки вообще не понятно, т.к. используется один и тот же ODBC драйвер, но получается разный результат.
...
Рейтинг: 0 / 0
28.05.2010, 10:13
    #36654671
SashaM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк при выборке из двух DBF-файлов
Приложите таблицы FTPNEW и FTPOLD
...
Рейтинг: 0 / 0
28.05.2010, 10:15
    #36654682
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк при выборке из двух DBF-файлов
Gaiver23точно известно, что причина ошибки вообще не понятно

ИМХО, это и раньше было известно

Может попробовать в форуме dBase? ADO - оно ж и в Африке ADO
...
Рейтинг: 0 / 0
28.05.2010, 10:15
    #36654685
Gaiver23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк при выборке из двух DBF-файлов
SashaMПриложите таблицы FTPNEW и FTPOLD

Таблицы создаются программно, следующим образом:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Public Function CreateDBFTemplate(sDBFName As String) As Boolean
Dim sPath As String

'===== Путь к DBF
sPath = App.Path & "\"

If Dir(sPath & "\" & sDBFName & ".dbf") = "" Then
    Dim conn As New ADODB.Connection
    conn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sPath & ";User ID=Admin;Password=;Extended Properties=dBase IV")
    '===== Создаем DBF
    conn.Execute "create table " & sDBFName & "(namefile char(128))"
    conn.Close

    Set conn = Nothing
    CreateDBFTemplate = True
Else
    CreateDBFTemplate = False
End If
End Function
...
Рейтинг: 0 / 0
28.05.2010, 10:16
    #36654688
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк при выборке из двух DBF-файлов
SashaMПриложите таблицы FTPNEW и FTPOLD
+1
или хотя бы скрипты их создания и заполнения, чтобы воспроизвести ситууацию
...
Рейтинг: 0 / 0
28.05.2010, 10:16
    #36654689
SashaM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк при выборке из двух DBF-файлов
Gaiver23Бьюсь уже не один день, есть такой код:
Код: plaintext
1.
strConn = "DBQ=" & App.Path & ";Driver={Microsoft dBase Driver (*.dbf)}; FIL=dBase4.0"
Вылетает сообщение об ошибке: [Microsoft][Драйвер ODBC dBase] Слишком мало параметров. Требуется 1.

Аналогичный код в MS ACCESS работает без проблем:

Код: plaintext
1.
strPath = "C:\MYPROG"
strConn = "DBQ=" & strPath & ";Driver={Microsoft dBase Driver (*.dbf)}; FIL=dBase4.0"

По пути App.Path лежат таблицы?
...
Рейтинг: 0 / 0
28.05.2010, 10:18
    #36654694
Gaiver23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк при выборке из двух DBF-файлов
SashaMGaiver23Бьюсь уже не один день, есть такой код:
Код: plaintext
1.
strConn = "DBQ=" & App.Path & ";Driver={Microsoft dBase Driver (*.dbf)}; FIL=dBase4.0"
Вылетает сообщение об ошибке: [Microsoft][Драйвер ODBC dBase] Слишком мало параметров. Требуется 1.

Аналогичный код в MS ACCESS работает без проблем:

Код: plaintext
1.
strPath = "C:\MYPROG"
strConn = "DBQ=" & strPath & ";Driver={Microsoft dBase Driver (*.dbf)}; FIL=dBase4.0"

По пути App.Path лежат таблицы?

Само собой. Программа работает постоянно с этими таблицами, спотыкается только при попытке сделать выборку сразу из двух таблиц.
...
Рейтинг: 0 / 0
28.05.2010, 10:24
    #36654714
SashaM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк при выборке из двух DBF-файлов
Проверил в Excel всё работает. Прикрепите заполненные таблицы, не прячьте :)
Код: 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.
Sub Create()
  CreateDBFTemplate "FTPOLD"
  CreateDBFTemplate "FTPNEW"

  Dim conn As ADODB.Connection
  Set conn = New ADODB.Connection
  Dim rs As ADODB.Recordset
  Set rs = New ADODB.Recordset
  Dim strConn As String
  Dim strPath As String
  strPath = "C:\MYPROG\"
  strConn = "DBQ=" & strPath & ";Driver={Microsoft dBase Driver (*.dbf)}; FIL=dBase4.0"
  conn.ConnectionString = strConn
  conn.Open conn.ConnectionString
  Dim sSQL As String
  sSQL = "SELECT namefile FROM FTPNEW WHERE namefile Not In (Select namefile FROM FTPOLD)"
  rs.Open sSQL, conn, adOpenStatic, adLockOptimistic
End Sub

Public Function CreateDBFTemplate(sDBFName As String) As Boolean
Dim sPath As String

'===== Путь к DBF
sPath = "C:\MYPROG\"

If Dir(sPath & "\" & sDBFName & ".dbf") = "" Then
    Dim conn As New ADODB.Connection
    conn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sPath & ";User ID=Admin;Password=;Extended Properties=dBase IV")
    '===== Создаем DBF
    conn.Execute "create table " & sDBFName & "(namefile char(128))"
    conn.Close

    Set conn = Nothing
    CreateDBFTemplate = True
Else
    CreateDBFTemplate = False
End If
End Function
...
Рейтинг: 0 / 0
28.05.2010, 10:38
    #36654785
SashaM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк при выборке из двух DBF-файлов
Я вообще не вижу смысла использовать несколько ODBC драйверов и постоянно открывать и закрывать коннекты. Попробуйте так:
Код: 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.
Dim conn As ADODB.Connection

Sub Create()
  Dim strPath As String
  strPath = "C:\MYPROG\"
  Set conn = New ADODB.Connection
  conn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strPath & ";User ID=Admin;Password=;Extended Properties=dBase IV")
 
  CreateDBFTemplate "FTPOLD"
  CreateDBFTemplate "FTPNEW"

  sSQL$ = "SELECT namefile FROM FTPNEW WHERE namefile Not In (Select namefile FROM FTPOLD)"
  Dim rs As New ADODB.Recordset
  rs.Open sSQL, conn, adOpenStatic, adLockOptimistic
  rs.Close
  Set rs = Nothing
  conn.Close
  Set conn = Nothing
End Sub

Public Function CreateDBFTemplate(sDBFName As String, Optional sPath As String = "C:\MYPROG\") As Boolean
  If Dir(sPath & "\" & sDBFName & ".dbf") = "" Then
    conn.Execute "create table " & sDBFName & "(namefile char(128))"
    CreateDBFTemplate = True
  End If
End Function
...
Рейтинг: 0 / 0
28.05.2010, 10:51
    #36654824
Gaiver23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк при выборке из двух DBF-файлов
SashaM, Понятно, что в Excel все работает, так как тот же VBA, а я уже говорил о том, что в MS ACCESS все работает. Смысл выкладывать таблицы, если ошибка происходит независимо от того, пустые таблицы или нет. Здесь ошибка в открытии рекордсета, а не в данных.
...
Рейтинг: 0 / 0
28.05.2010, 11:42
    #36654997
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк при выборке из двух DBF-файлов
У меня ошибка не воспроизводится :(
...
Рейтинг: 0 / 0
28.05.2010, 11:54
    #36655044
Gaiver23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк при выборке из двух DBF-файлов
Я понял из-за чего может происходить данная ошибка. Дело в том, что если делать выборку из dbf-файла запросом вида "SELECT [имя_поля] FROM [имя_таблицы]", то запрос возвращает ту самую ошибку, а если же отобрать записи запросом типа: "SELECT * FROM [имя_таблицы]" - тогда все прекрасно работает, т.е. ошибка из-за того, что в запросе указывается имя поля. Теперь вопрос следующий: У меня обязательно должно присутствовать в выборке имя_поля, так как запрос на Not In, как бороться дальше????
...
Рейтинг: 0 / 0
28.05.2010, 11:57
    #36655057
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк при выборке из двух DBF-файлов
Такое ощущение, что имя поля воспринимается как параметр, который надо задать.
Когда я предложил изменить запрос и имя поля встретилось там больше раз, вы сказали, что ошибка изменилась - стало требовать больше параметров.

А попробуйте квалифицировать имя поля полностью - с именем таблицы.
...
Рейтинг: 0 / 0
28.05.2010, 12:03
    #36655080
Gaiver23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк при выборке из двух DBF-файлов
Shocker.ProТакое ощущение, что имя поля воспринимается как параметр, который надо задать.
Когда я предложил изменить запрос и имя поля встретилось там больше раз, вы сказали, что ошибка изменилась - стало требовать больше параметров.

А попробуйте квалифицировать имя поля полностью - с именем таблицы.

Да вы верно заметили, это я про параметры. Имя поля уже пробывал прописывать полностью, результат был тот же. Сейчас вот для того, чтобы убедится в реальном косяке попробую на другом компьютере проверить.
...
Рейтинг: 0 / 0
28.05.2010, 12:04
    #36655085
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк при выборке из двух DBF-файлов
Однако, вы говорили, что
SELECT [namefile] FROM FTPNEW у вас работает!!!
...
Рейтинг: 0 / 0
28.05.2010, 12:09
    #36655095
Gaiver23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк при выборке из двух DBF-файлов
Срочно в номер!
Скомпилированная версия работает, как часы, никаких сообщений об ошибках не вылетает и в лог не пишется!!!!! Буду перезагружать свой комп.
...
Рейтинг: 0 / 0
28.05.2010, 13:35
    #36655381
Gaiver23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк при выборке из двух DBF-файлов
Через DAO такая же ошибка, и опять же в MS Access все работает, как надо. Скомпилированная версия работает на любом компьютере без ошибок, а не скомпилированная вываливает ошибку на любом компьютере. Интересно, как же тогда работать с dbf-файлами из Visual Basic если мне нужно в запросе обязательно указывать имена полей????
...
Рейтинг: 0 / 0
28.05.2010, 13:43
    #36655399
SashaM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк при выборке из двух DBF-файлов
Что у тебя показывает в IDE App.Path?
...
Рейтинг: 0 / 0
28.05.2010, 14:29
    #36655529
Gaiver23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк при выборке из двух DBF-файлов
SashaMЧто у тебя показывает в IDE App.Path?

Да все нормально он показывает, я уже не один раз говорил, что проблема в том, что нельзя задавать имена полей в SELECTE.
...
Рейтинг: 0 / 0
28.05.2010, 14:34
    #36655545
SashaM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк при выборке из двух DBF-файлов
Если только имена совпадают с командами или ключевыми словами.
...
Рейтинг: 0 / 0
28.05.2010, 14:39
    #36655558
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк при выборке из двух DBF-файлов
Gaiver23,

попробуй переустановить сам АДО.
...
Рейтинг: 0 / 0
30.05.2010, 18:14
    #36657799
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк при выборке из двух DBF-файлов
Игорь Горбонос,
а как в запросе указать числовое поле?
пробую так получается
Код: plaintext
Conn.Execute "create table " & sDBFName & "(kod char(20),name char(100),sklad integer)"
но мне хотелось длину установить, а так выдает ошибку
Код: plaintext
Conn.Execute "create table " & sDBFName & "(kod char(20),name char(100),sklad integer(6,0))"
...
Рейтинг: 0 / 0
30.05.2010, 18:15
    #36657804
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк при выборке из двух DBF-файлов
aduka05adm,

почитай сначала описание типов данных в dBase
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Косяк при выборке из двух DBF-файлов / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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