Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/22: Рейтинг темы: голосов - 22, средняя оценка - 4.68
1 / 1 / 0
Регистрация: 28.09.2007
Сообщений: 285

Как создать новую dbf таблицу в cp866 через ADO ?

09.06.2009, 17:32. Показов 4291. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Почему не хочет работать кусок кода :
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
cnn.Open 'Driver={Microsoft Visual FoxPro Driver};' & _
                   'SourceType=DBF;' & _
                   'SourceDB=' + dbName + ';' & _
                   'Exclusive=Yes;'
Set RsT = New ADODB.Recordset
StrSQL:='Create Table T2 ( F1 char(7), F2  char(7) , N float ) '
Set cmd = New ADODB.Command
Set cmd.ActiveConnection = cnn
cmd.CommandType = adCmdText 
cmd.CommandText = strSQL
cmd.Execute
' Кажется , что все OK
 
RsT.Open Source:='SELECT * from t2 ', _
    ActiveConnection:=cnn, _
    CursorType:=adOpenDynamic, _
    LockType:=adLockOptimistic, _
    Options:=adCmdText
' Здесь становится ясно , что Create Table не сработала
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.06.2009, 17:32
Ответы с готовыми решениями:

Как создать индексы к DBF в ADO?
Подобный вопрос уже был. Неужели никто не знает как создать индексы к DBF в ADO. Спасибо.

Как SQL-ем создать DBF таблицу?
Подскажите пожалуйста, можно ли SQL-ем создать DBF таблицу? Заранее признателен Kostian.

Работа в DBF через ADO
Правильно ли я понимаю то что написано в заголовке? Объясните как реализовать доступ к БД (редактирование, создание) когда имена БД...

6
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
09.06.2009, 19:23
Почему иногда перед символами = стоят двоеточия?

Чему равна переменная DBName - это что, директория?
0
1 / 1 / 0
Регистрация: 28.09.2007
Сообщений: 285
10.06.2009, 18:19  [ТС]
Добрый день palva!
К счастью (почти полному) обнаружил Ваше сообщение на
http://www.relib.com/forums/topic.asp?id=738890 :
Visual Basic
1
2
3
4
5
6
7
Set cnn = CreateObject('ADODB.Connection')
cnn.ConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0;' & _
'Data Source=C:Temp '
cnn.Properties('Extended Properties').Value = 'DBASE IV'
cnn.Open
cnn.Execute 'CREATE TABLE tbl1 (col1 NUMERIC(6,2), col2 char(10))' 
cnn.Execute 'INSERT INTO tbl1 VALUES (134323, 'q5bdsj')'
И этот пример у меня сработал .

Но вот только есть проблемки:
- col1 NUMERIC(6,2) не хочет давать этот формат поля - дает всегда (20,5) , что не задавай!
Кстати а какой SQL использует этот провайдер, где посмотреть его описание (это ведь не SQL MsJet ?), т.е. как указать правильно формат полей в Create Table ?
- вновь созданная tbl1 не имеет кодового маркера - если откывать ее в visual foxpro , то выдается вопрос. А нужен cp866.

А Что касается DBName , то это действительно директория(неаккуратно набросал сообщение), символы же ':=' правильно соответствуют синтаксису именованных параметров.

Если Вы прочтете это сообщение, то не могли бы решить еще одну проблему : почему при установленном BDE (Delphi) никак не получается привязать к MDB базе кодом через ODBC внешнюю DBF (DOS) таблицу . Хотя через меню Access это удается. Иногда, как я понял индексы мешают слишком сложные... А в чем дело - не понятно .
Т.е. у меня теперь ситуация такова, что я используя VB и работая с привязанными таблицами не могу использовать Deplhi
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
10.06.2009, 23:19
Моим старым примером лучше не пользоваться. Он плохо работает, к тому же только на чтение.

Лучше всего пользоваться тем драйвером, который вы использовали вначале. У меня работает следующий код:
Code
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub Form_Load()
Set cn = CreateObject('ADODB.Connection')
cn.Open 'Driver={Microsoft Visual FoxPro Driver};' & _
    'Exclusive=Yes;Null=No;SourceType=DBF;SourceDB=C:/MyTables'
cn.Execute 'CREATE TABLE [C:/MyTables/table1] (' & _
    'COL1 INTEGER, ' & _
    'COL2 CHAR(10), ' & _
    'COL3 NUM(12,5), ' & _
    'COL4 MEMO)'
cn.Close
Set cn = Nothing
End Sub
При этом ваша программа по-видимому работала, но таблички падали в текущую директорию проекта, и вы их не находили. При создании нужно указывать путь таблицы полностью (если пробелов нет, то квадратные скобки можно опустить), а SourceDB тоже нужно указывать, наверно, это используется при запросах типа SELECT. Null нужно указывать, для того, чтобы не создавалось дополнительное поле флагов для индикации незаполненных полей. Другой вариант избежать этого дополнительного поля это у каждого поля написать NOT NULL. Кодовый байт создается, но как его сделать 866 я не знаю. В принципе его можно после создания подправить из программы в двоичном виде. При создании таблицы типы полей распознаются по первой букве (ведь в файле DBF они кодируются одной буквой). Поэтому если вместо NUM(12,5) написать DEC(12,5) то будет создано поле типа DATE.

Вот и всё, что я знаю по заданным вопросам.
0
1 / 1 / 0
Регистрация: 28.09.2007
Сообщений: 285
11.06.2009, 00:17  [ТС]
Спасибо за ответ .
Действительно имеет значение наличие пути перед именем создаваемой таблицы, что смешно - работает даже , если этот путь отличается от пути в строке ConnectionString. И маркер на это раз у меня стал создаваться, вот только про Null я не понял - в DFB таблице даже при Null=Yes не создается никакого дополнительного поля.
А что касается старого примера , то он работает и на запись ( я по нему, привязав эту таблицу к MDB , экспортирую в DBF информацию из внутренней таблицы MDB) и даже в разделяемом режиме.
А насчет BDE - ничего ?...
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
11.06.2009, 00:40
Не знаю, если я убираю параметр Null совсем, то у меня создается дополнительное поле с именем _NullFlag и длиной 1 байт, в байте типа стоит символ '0'. Это если среди остальных полей имеется хотя бы одно с разрешением значений NULL. Если у всех полей написать NOT NULL, то такое поле не создается.
0
1 / 1 / 0
Регистрация: 28.09.2007
Сообщений: 285
11.06.2009, 12:53  [ТС]
Хорошо,
Но ,как я обнаружил сегодня,- созданная таким образом (c помощью провайдера Visual Foxpro Driver) таблица не понимается уже foxpro2.6 под DOS (только VisualFP), а это как раз и печалит, хотя в общем-то , работает старый Ваш пример.

А привязывать DBF таблицы программно к MDB не пытались? Нет ли технологии привязки в OLEDB ADO подобной DAO :
Visual Basic
1
2
3
4
5
 Set ws = DBEngine.Workspaces(0) 
 Set db = ws.OpenDatabase(MyDbName) 
 Set tdf = db.CreateTableDef(asNameT) 
 tdf.Connect = StrCnn: tdf.SourceTableName = SrcTableName
 db.TableDefs.Append tdf
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.06.2009, 12:53
Помогаю со студенческими работами здесь

Открыть dbf с мемо через ADO
Привет всем. Проблема такая: необходимо взять данные из dbf файла другой программы. Проблем открытия не имеется со всеми файлами кроме...

Помогите с подключением DBF-файла через ADO в NT
Помогите кто-нибудь! Делаю следующее Set cn = New ADODB.Connection cn.Open 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' &...

Помогите с подключением DBF-файла через ADO в NT
Помогите кто-нибудь! Делаю следующее Set cn = New ADODB.Connection cn.Open 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' &...

Как на VB вы привязываете к MDB базе внешнюю dbf таблицу через ODBC ?
Как на VB вы привязываете к MDB базе внешнюю dbf таблицу через ODBC ?

ASP, ADO, Access - как создать временную таблицу в памяти?
День добрый! Сильно не бейте, если вопрос совсем банальный, но поиски по гуглу в течение дня результатов не дали. У меня есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru