Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > как подключиться к dbc?


Автор: Gunslinger 3.10.2008, 13:57
База на 9ке, ссылка на драйвер есть.
Дали ссылку на строку, но не проверял:
Код

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyExcel.xls;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1";
 
Тут возникают вопросы:
1. Путь может меняться через меню (базу можно будет пересохранять в другое место и работать уже по нему). Можно ли передавать в Source переменную?
2. Эксель может быть разный: от 97 до 2007. Можно писать эксел без цифры или придется каждый раз определять, какой эксел на машине, а затем подставлять соответствующую строку?
3. Там еще была альтернативная строка: OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyExcel.xls;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1";. В чем разница?
4. Как мне все это объединить: как обращаться к драйверу, нужно ли проводить какие-нибудь изменения в винде? Про дрова к БД знаю только, что это посредник.

Автор: Gunslinger 4.10.2008, 16:22
1.
Код

ADOConnection1->ConnectionString="Provider=VFPOLEDB.1;Data Source=C:\my.dbc;Mode=ReadWrite|Share Deny None; Password="";Collating Sequence=MACHINE";

После изменения свойства Connected на true пишет ошибку Invalid Enum Value. И теперь даже компонент не удалить. 

2. До ошибки ADOConnection нормально компилировалось. БД подключилась или нет? Как проверить?

Автор: Данкинг 4.10.2008, 16:47
Ну вот какая строка у меня получилась:
Код

ADOConnection1->ConnectionString="Provider=VFPOLEDB.1;Data Source=D:\aaa.dbc;Password="";Collating Sequence=MACHINE"

Автор: Gunslinger 4.10.2008, 17:43
Данкинг, подробнее:
Код

AnsiString ConnectBase="Provider=VFPOLEDB.1;Data Source=C:\Program     Files\AutoExporterXlsToDbf\DBC\Budget.dbc;Password="";Collating Sequence=MACHINE";

//............

__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
  ADOCon->ConnectionString=ConnectBase;
  ADOCon->Connected=true;
}

Теперь при компилирование лезет ошибка Invalid Enum Value. Ecли Connected не выставлять, то все нормально. + по строке ConnectionString тест проходит success.

Автор: Gunslinger 4.10.2008, 18:18
Сейчас другая ошибка:
Project1 Project1.exe raised exception class EOleException with message 'Invalid path or file name '

Фигня творится.
Более полный код:
Код

AnsiString ConnectBase="Provider=VFPOLEDB.1;Data Source=C:\Program Files\AutoExporterXlsToDbf\DBC\Budget.dbc;Password="";Collating Sequence=MACHINE";
Variant myExcel;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
try {
   myExcel = CreateOleObject("Excel.Application");
    } catch(...) {
      Application->MessageBox("Невозможно открыть Microsoft Excel"
      "На вашем компьютере не установлен Microsoft Excel.","Ошибка",MB_OK+MB_ICONERROR);
    }
  myExcel.OlePropertySet("Visible", true);
  ADOCon->ConnectionString=ConnectBase;
 ADOCon->Connected=true;//Ошибка после этой строке

}

Автор: Данкинг 4.10.2008, 18:27
Не пойму: ты к чему подключиться хочешь? Какая связь файлов .dbc и Excel ? smile 
К тому же учти, что FoxPro не любит пробелов в пути к базе/таблице, т.е. из "C:\Program     Files" - заведомо открываться не будет.

Автор: Gunslinger 4.10.2008, 19:45
1. Создаю экземпляр эксела.
2. Открываю в него эксел файл.
3. Подключаюсь к dbc (создал в 9ке)
4. Читаю из эксела - пишу в dbc.

Цитата(Данкинг @  4.10.2008,  18:27 Найти цитируемый пост)
К тому же учти, что FoxPro не любит пробелов в пути к базе/таблице, т.е. из "C:\Program     Files" - заведомо открываться не будет.

Т.е. придется парсить строку с путем к dbc и удалять пробелы между словами? Вот гемор заработал.
Только вот из-за чего эта ошибка с коннектед? Может дбЭкспресс попробовать? Но под него фоксового драйвера в списке нет.

Автор: Данкинг 4.10.2008, 20:00
Цитата(Gunslinger @  4.10.2008,  20:45 Найти цитируемый пост)
Т.е. придется парсить строку с путем к dbc и удалять пробелы между словами?

В каком смысле? Если ты пробелы удалишь, то тогда вообще путь к файлу исчезнет. smile 

Цитата(Gunslinger @  4.10.2008,  20:45 Найти цитируемый пост)
Подключаюсь к dbc (создал в 9ке)

А почему не .dbf ? .dbc - это БД, а экспорт же из конкретной таблицы происходить должен.

Цитата(Gunslinger @  4.10.2008,  20:45 Найти цитируемый пост)
Только вот из-за чего эта ошибка с коннектед?

Вероятно, из-за этого: в твоей БД нет таблиц.

Цитата(Gunslinger @  4.10.2008,  20:45 Найти цитируемый пост)
Может дбЭкспресс попробовать? Но под него фоксового драйвера в списке нет.

Не знаю, не пробовал, я всегда юзал ADO, и не думаю, что от дбЭкспресс что-то изменится. Правда, я на Дельфи пишу, но суть та же.

Добавлено @ 20:01
Цитата(Gunslinger @  4.10.2008,  18:43 Найти цитируемый пост)
 по строке ConnectionString тест проходит success. 

Да, есть такой глюк: создай пустой файл aaa.dbc, напиши в нём "бугога" и попробуй к нему подключиться - тоже  будет success. smile 

Автор: Gunslinger 5.10.2008, 08:19
Цитата(Данкинг @  4.10.2008,  20:00 Найти цитируемый пост)
В каком смысле? Если ты пробелы удалишь, то тогда вообще путь к файлу исчезнет.

Ты пример с Program Files приводил. Или ты про дополнительные ненужные пробелы?



Цитата(Данкинг @  4.10.2008,  20:00 Найти цитируемый пост)
А почему не .dbf ? .dbc - это БД, а экспорт же из конкретной таблицы происходить должен.

В таблицах есть индексы и ключи. Я думал, что dbc возьмет на себя их генерацию и проверку целостности, чтоб мне программно все это не писать.
Тогда в ADO при выборе между dbc и free table нужно выбирать последнее? Опять же, как быть с генерацией индексов и ключей?

Цитата(Данкинг @  4.10.2008,  20:00 Найти цитируемый пост)
Вероятно, из-за этого: в твоей БД нет таблиц.

Таблицы есть.

Автор: Данкинг 5.10.2008, 10:55
Цитата(Gunslinger @  5.10.2008,  09:19 Найти цитируемый пост)
Ты пример с Program Files приводил.

Это я из твоего примера взял.

Цитата(Gunslinger @  5.10.2008,  09:19 Найти цитируемый пост)
Тогда в ADO при выборе между dbc и free table нужно выбирать последнее? Опять же, как быть с генерацией индексов и ключей?

Я всегда подключался к конкретной таблице, т.е. как подключаться к DBC в целом (кроме того, что указать в строке подключения "Database") - не в курсе, надо экспериментировать (впрочем, видимо, так же). Соответственно, индексы мне тоже не были нужны никогда, собственно, и не знаю, как их из ADO можно использовать и можно ли вообще.
В общем, попробуй сначала кинуть файлы в папку, не содержащую пробелов в пути к себе.





Автор: Gunslinger 5.10.2008, 13:28
Цитата(Данкинг @  5.10.2008,  10:55 Найти цитируемый пост)
В общем, попробуй сначала кинуть файлы в папку, не содержащую пробелов в пути к себе.

Кинул в D:\AutoConv\DBC\
Ошибка таже: 
Project1 Project1.exe raised exception class EOleException with message 'Invalid path or file name '

Может что-нибудь с драйвером? Или не в Form1 нужно было писать? Перменная со строкой провайдера - как глобальная, инициальизация в Form1. 

Если нужен код - выложу, там чуть-чуть.

Автор: Данкинг 5.10.2008, 13:34
Цитата(Gunslinger @  5.10.2008,  14:28 Найти цитируемый пост)
Если нужен код - выложу, там чуть-чуть. 

Ну так выложи, посмотрим...

Автор: Gunslinger 5.10.2008, 14:10
Приложил.
Закомментированная глобальная переменная ConnectBase - строка провайдера. Там же база к которой не получается подключиться. 
В Form1 закомментирована сторока проверки соединения из за которой лезет ошибка.

Автор: Данкинг 5.10.2008, 14:30
Поробовал подключиться к твоей БД. Вот моя строка подключения:

Код

Provider=VFPOLEDB.1;Data Source=D:\PROGI\PRG\DELPHI\TEST\111\BUDGET.DBC;Mode=Share Deny None;Extended Properties="";User ID="";Password="";Mask Password=False;Cache Authentication=False;Encrypt Password=False;Collating Sequence=MACHINE;DSN=""

Всё работает отлично, и даже данные из AdoTable выводятся (т.е. из Everithing.dbf).
 Попробуй не программно, а вручную создать строку подключения и поставить active у AdoConnection. Ошибки быть не должно.

Автор: Gunslinger 5.10.2008, 14:40
Цитата(Данкинг @  5.10.2008,  14:30 Найти цитируемый пост)
active у AdoConnection.

Не нашел. Это случаем не дельфийская штука?

Автор: Gunslinger 5.10.2008, 15:38
ты в билдере делал?

Автор: Gunslinger 5.10.2008, 16:06
Создал новый чистый проект. Добавил только ADOConnection. Строку подключения прописал сразу, Connected=true поставил программно. Прога запустилась, ошибок нет. Мне очень желательна возможность менять местоположение базы. Как мне быть?

Автор: Данкинг 5.10.2008, 16:58
Я в Дельфи делал, билдер я снёс давно уже. Но ADO же един для всех.

Автор: Gunslinger 5.10.2008, 21:55
Может из-за типа: слеш двойной может ставить надо вместо одинарного? Имя файла верное: без спецсимволов, пробелов, длина - меньше 8. Мой пример заработал сразу или ты что-нибудь менял?

Автор: Данкинг 5.10.2008, 22:01
Цитата(Gunslinger @  5.10.2008,  22:55 Найти цитируемый пост)
Мой пример заработал сразу или ты что-нибудь менял?

В смысле - я же говорю, билдера у меня нет, но в коде я лично ошибок таких вот явных не вижу. А подключение нормально заработало, только я, соответственно, в каталог без пробелов скопировал базу.

Добавлено через 1 минуту и 5 секунд
Цитата(Gunslinger @  5.10.2008,  22:55 Найти цитируемый пост)
Может из-за типа: слеш двойной может ставить надо вместо одинарного? 

Попробуй, может, и так, кстати, я уж синтаксис С так досконально не помню.

Автор: Gunslinger 6.10.2008, 10:34
все равно ошибку выдает. Ссылается на файл проекта Application->Run();
Добирусь до дома - попробую на делфи.

Автор: Gunslinger 10.10.2008, 10:06
Все-таки дело было в слешах. Невнимательно смотрел строку, когда дублировал. 
Спасибо за помощь!

Добавлено через 14 секунд
закрыл

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)