Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перевести Delphi на C++Builder, C++Builder 2009 
V
    Опции темы
mrbrooks
Дата 14.1.2009, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Romikgy, я так делал - но у меня Борман генерирует ошибку

Цитата

[BCC32 Fatal Error] u_temp.cpp(40): F1004 Internal compiler error at 0x4c2471b with base 0x4bc0000


хотя возможно есть смысл поковыряться в настройках компилятора.

Добавлено через 24 секунды
Говорю о C++ Builder 2009
PM MAIL   Вверх
Romikgy
Дата 14.1.2009, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 11
Всего: 146



Цитата(mrbrooks @  14.1.2009,  07:44 Найти цитируемый пост)
Говорю о C++ Builder 2009 

я в нем и проверял , ошибок при компиляции не было одна разница с твоим кодом !!!!!
Цитата(Romikgy @  14.1.2009,  00:11 Найти цитируемый пост)
Variant cat;

так работает а так 
Цитата(Alca @  13.1.2009,  09:51 Найти цитируемый пост)
OleVariant cat;

нет !

незнаю в чем у них отличие , но с олевариант не работает, там другой прототип , но с ним я не разобрался((


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Alca
Дата 14.1.2009, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Цитата

Код

Variant cat;

cat = CreateOleObject("ADOX.Catalog");
cat.OleProcedure("create","Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\new.mdb;");
cat = NULL;


Не создаётся!  smile 
Я в шоке. Нет слов.

Это сообщение отредактировал(а) Alca - 14.1.2009, 10:24


--------------------
PM WWW ICQ Skype Jabber   Вверх
mrbrooks
Дата 14.1.2009, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Romikgy, Разобрался. Все работает  smile 


Alca, у меня все ок.
PM MAIL   Вверх
Alca
Дата 14.1.2009, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Засвети код.


--------------------
PM WWW ICQ Skype Jabber   Вверх
mrbrooks
Дата 14.1.2009, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Код

        Variant vADO;
    vADO = CreateOleObject("ADOX.Catalog");
    vADO.OleProcedure("Create","Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\123.mdb;");
    vADO = NULL;


Это сообщение отредактировал(а) mrbrooks - 14.1.2009, 10:28
PM MAIL   Вверх
Alca
Дата 14.1.2009, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Заработало. Я так понял, что второй аргумент в функции OleProcedure это не юникодная строка.
Чего так?


--------------------
PM WWW ICQ Skype Jabber   Вверх
Romikgy
Дата 14.1.2009, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 11
Всего: 146



да и первый не юникод имхо 
по мануалам на дельфи 
variant это ansistring 
olevariant это widestring
в чем разница в реализаций трудный вопрос поидее должно было быть наследование но инфы на этот счет не нашел((


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Alca
Дата 14.1.2009, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Второй аргумент это WideString. Ну и где же поддержка юникода?

Это сообщение отредактировал(а) Alca - 14.1.2009, 11:02


--------------------
PM WWW ICQ Skype Jabber   Вверх
mrbrooks
Дата 14.1.2009, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Интересно. Сам Variant действительно поддерживает только AnsiString, а вот аргументы в методе OleProcedure Unicode поддерживают. Но компиллер именно на аргументы в юникоде и матерится. Это возмутительно - либо есть какой то нюанс.
PM MAIL   Вверх
Alca
Дата 14.1.2009, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Инересно было бы докопаться до истины. smile 
В самом методе путь к файлу это WideString строка, 
а передается в метод UnicodeString строка и 
всё работает как надо, файл создаётся.
Я так понял что Unicode при вызове функции плавно
перешел в WideString......
Код

//---------------------------------------------------------------------------
bool bCreateAdoMDB(const WideString &cwsMdbFilePath) {
    bool    bRes = false;
    Variant vADO = Unassigned;

    try {
        vADO = CreateOleObject(L"ADOX.Catalog");
        vADO.OleProcedure(L"Create", WideString("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=") + cwsMdbFilePath + WideString(";"));

        bRes = true;
    } catch (...) {
        bRes = false;
    }

    vADO = Unassigned;

    return bRes;
}
//---------------------------------------------------------------------------
UnicodeString usMdbFilePath = L"C:\\xxxxxxx.mdb";
if (false == bCreateAdoMDB(usMdbFilePath)) {
    MessageBox(0, L"false == bCreateAdoMDB", L"", MB_OK);
}
//---------------------------------------------------------------------------


Добавлено @ 11:29
Надо Unicode в WideString переганять.
Код

bool bCreateAdoMDB(const UnicodeString &cusMdbFilePath) {
    bool    bRes = false;
    Variant vADO = Unassigned;

    try {
        vADO = CreateOleObject(L"ADOX.Catalog");
        vADO.OleProcedure(L"Create", WideString(L"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=") + WideString(cusMdbFilePath) + WideString(L";"));
        bRes = true;
    } catch (...) {
        bRes = false;
    }

    vADO = Unassigned;

    return bRes;
}


Это сообщение отредактировал(а) Alca - 14.1.2009, 11:48


--------------------
PM WWW ICQ Skype Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0523 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.