Как достал уже этот DBF ! ! !

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Как достал уже этот DBF ! ! !

Сообщение shady » 16.03.2006 (Чт) 12:19

Здравствуйте!
Уже не знаю что делать!
Метод научного тыка не подошел!
Что имеем: есть база DOS кодировка
попытки подключиться:
Код: Выделить всё
Public Sub conect()
    Set conn = New ADODB.Connection
    conn.CursorLocation = adUseClient

1.
Код: Выделить всё
conn.Open "Provider=vfpoledb.1;Data Source=C:\debnew\baza\"

подключается без ошибок :) как ни странно, но, не поддерживает то что мне нужно, а нужно мне:
Код: Выделить всё
conn.Execute "SELECT * INTO c:\debnew\doo\" & dbName & " FROM " & dbName & " WHERE reg='97' OR reg='98'"

а именно не поддерживается
Код: Выделить всё
SELECT * INTO

2.
Код: Выделить всё
conn.Open "Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=C:\debnew\baza\;"

ошибка: Индекс не найден. Хотя индексные файлы на месте, переиндексация проблемы не решает.
Что можете посоветовать?

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 16.03.2006 (Чт) 12:31

вместо
Код: Выделить всё
SELECT * INTO


попробуй указать конкретные поля:
Код: Выделить всё
SELECT Field1, Field2 , ... INTO

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 16.03.2006 (Чт) 12:45

пробывал, забыл только написать об этом

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 16.03.2006 (Чт) 12:47

пишет всегда SYNTAX ERROR

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 16.03.2006 (Чт) 12:50

1. Возможно в первом случае индекс cdx, во втором mdx
2. Попробуй вместо SELECT * INTO ... использовать INSERT INTO T1 SELECT * FROM T2

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 16.03.2006 (Чт) 12:51

А что, на такое он не должен писать syntax error?

SELECT fieldlist INTO tablename IN "C:\DBASE\DATA\SALES" "dBASE IV;" FROM ...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 16.03.2006 (Чт) 13:06

только щас обратил внимание :lol:

conn.Execute "SELECT * INTO c:\debnew\doo\" & dbName & " FROM " & dbName & " WHERE reg='97' OR reg='98'"

Это что за лабуда :?:

так надо:

Код: Выделить всё
SELECT * INTO NewTable FROM OldTable WHERE ...


никаких полных путей не предусмотрено, провайдер работает с той директорией, которая определена при открытии коннекта :!:

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 16.03.2006 (Чт) 15:10

только щас обратил внимание

conn.Execute "SELECT * INTO c:\debnew\doo\" & dbName & " FROM " & dbName & " WHERE reg='97' OR reg='98'"

Это что за лабуда

так надо:

Код:

SELECT * INTO NewTable FROM OldTable WHERE ...

никаких полных путей не предусмотрено, провайдер работает с той директорией, которая определена при открытии коннекта

это как Вы выразились не лабуда а "нормальный" для ДБФ запрос.

сейчас выявил вот такую вещь:
Код: Выделить всё
conn.Open "Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=C:\debnew\baza\;"

1. Удаляю индексный файл DZ1603.CDX
2. попытка выполнить запрос фигу!
2.1. открываю через визуал фоксу 8.0 (он конечно ругается на индекс) но открывает
2.2. попытка выполнить запрос. И о чудо! таблица создана там где мне нужно (!!!) c:\debnew\doo\DZ1603.dbf и с нужными данными!
Код: Выделить всё
SELECT * INTO c:\debnew\doo\DZ1603.dbf FROM C:\DEBNEW\BAZA\DZ1603.DBF WHERE reg='97' OR reg='98'

3. Закрываю ВБ, перегружаюсь, индексирую таблицу средствами проги которая ее создала (фокса 2,6 (ДОС))
4. Запускаю свой запрос и как обычно Фига! ИНДЕКС НЕ НАЙДЕН
что скажете?? как это понимать?? глюки драйвера?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 16.03.2006 (Чт) 15:13

shady писал(а):это как Вы выразились не лабуда а "нормальный" для ДБФ запрос.

У DBF запросов не бывает, не нормальных, не ненормальных. Запросы бывают у провайдера. И я сомневаюсь, чтобы стандартный провайдер MS такое предоставлял.
Lasciate ogni speranza, voi ch'entrate.

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 16.03.2006 (Чт) 15:19

alibek, как ни странно, он
Код: Выделить всё
"Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=C:\debnew\baza\;"
это предоставляет.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 16.03.2006 (Чт) 15:28

это синтаксис для подключения через ODBC драйвер, а сначала ты спрашивал про OLE DB провайдер Visual Fox Pro - это разные вещи

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 16.03.2006 (Чт) 15:40

это синтаксис для подключения через ODBC драйвер, а сначала ты спрашивал про OLE DB провайдер Visual Fox Pro - это разные вещи

прошу прощения если ввел в заблуждение, но как я писал выше
1.
conn.Open "Provider=vfpoledb.1;Data Source=C:\debnew\baza\"
подключается без ошибок как ни странно, но, не поддерживает то что мне нужно, а нужно мне: SELECT * INTO....

что можете посоветовать?

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 16.03.2006 (Чт) 15:44

а ты проверил это :?:


Код: Выделить всё
conn.Open "Provider=vfpoledb.1;Data Source=C:\debnew\baza\"
conn.Execute  "SELECT * INTO NewTable FROM DZ1603"

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 16.03.2006 (Чт) 16:08

да, проверял, пишет SYNTAX ERROR, при этом простой селект работает.
проверял как
Код: Выделить всё
SELECT * INTO 123.dbf
так и
Код: Выделить всё
SELECT * INTO 123
.
Т.е. надо понимать не поддерживается такая инструкция... INTO

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 16.03.2006 (Чт) 16:21

SELECT * INTO [123.dbf] FROM [DZ1603]

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 16.03.2006 (Чт) 16:42

да нет, не работает и так :(
здесь я думаю ловить с ним нечего, как ни крути, не поддерживается сама инструкция... "в новую таблицу"

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 16.03.2006 (Чт) 16:44

надо наверное через Microsoft dBASE Driver ODBC пробывать

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 16.03.2006 (Чт) 17:48

Через DAO прекрасно работает

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 17.03.2006 (Пт) 7:55

Через DAO прекрасно работает

что работает?
мне данные в рекордсете вообще не нужны

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 27.06.2006 (Вт) 9:17

Поднимаю снова эту тему, так как решил проблему.
Итак, что же было:
подключение через
Код: Выделить всё
"Driver={Microsoft dBASE Driver (*.dbf)};DriverID=21;Dbq=C:\DEBNEW\BAZA;UseProcForPrepare=No"


Вываливалась ошибка:
Код: Выделить всё
[Mocrosoft][Driver ODBC dBase] Индекс не найден


Поискав по интернету про структуру DBF файла нашел, что за наличие или отсутствие индексного файла отвечает 28 байт DBF-ки

Код: Выделить всё

Private Sub Command3_Click()
    Open "C:\DEBNEW\BAZA\TOV22060.DBF" For Binary As #1
Put #1, 28, 0
Close #1
End Sub


поправили, и все, можно работать! Ошибки не будет!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 32

    TopList