Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Управление базой данных из приложений Borlanda


Автор: MAXIQ 21.7.2007, 12:32
    При загрузке базы данных созданной либо в Access либо в VisualFoxPro на стадии разработки, Borland асатанело требует какой-то пароль, который я не задавал вообще  ни на стадии создания базы данных ни на каком-либо другом этапе, как быть даже не знаю, прочитал самоучитель по базам в Borland-е но там ничего хорошего не нашел, в общем HELP!!!!!!!!

Автор: Rodman 21.7.2007, 12:52
Каким компонентами пользуешься?

свойство LoginPrompt поставь в False и запроса не будет...

Автор: MAXIQ 22.7.2007, 01:30
Компоненты TTable и DataSource  а так же DBNavigator и DBGrid ни в какую не хочет присваиваться имя базы данных и имя таблицы, на таблице вылазит то же запрос пароля. Аналогично ведет себя если пойти через SQL Explorer но уже на стадии выбора имени базы данных, так как Borland-у надо показать на экране все таблицы которые есть в этой базе то запрос на пароль вылазит раньше. И как с этим бороться? И свойства такого я ни в одном используемом мной компоненте не нашел.

Автор: fish9370 22.7.2007, 11:54
Цитата(MAXIQ @ 22.7.2007,  01:30)
Компоненты TTable и DataSource  а так же DBNavigator и DBGrid ни в какую не хочет присваиваться имя базы данных и имя таблицы, на таблице вылазит то же запрос пароля. Аналогично ведет себя если пойти через SQL Explorer но уже на стадии выбора имени базы данных, так как Borland-у надо показать на экране все таблицы которые есть в этой базе то запрос на пароль вылазит раньше. И как с этим бороться? И свойства такого я ни в одном используемом мной компоненте не нашел.

это ты работаешь через BDE (Borland Data Engine).. дело в том, что DBF-таблица не является базой данных, в нормальном понимании, это всего лишь таблица и открывать ее нужно так:

Код

   Table1->Active=false;
   Table1->TableName="C:\\Program Files\\Borland\\CBuilder6\\Projects\\DBCorrector\\database\\keys.dbf";
   Table1->Active=true;


DataSource1->DataSet=Table1;
DBGrid1->DataSource=DataSource1;

все остальные настройки по дефолту.. на форме компоненты: TTable, TDataSource, TDBGrid и кнопка, в обработчике которой находится этот код..

Автор: MAXIQ 23.7.2007, 15:54
Таблица действительно прогрузилась. правда только та, что я сдалал специально для пробы без индексов, однако как только Borland видит поле с индексом разумеется начинаются проблемы.
Сама задача состоит в том, чтоб при единой базе данных предприятия, находящейся на сервере. или вообще на достаточно производительном простом компе, рулить ей с рабочих мест приложениями Borland-a при соблюдении сохранности и целостности данных, скорость может быть и не высокой, но все равно быстрее чем в ручную и бегом получится)), при том на одном месте может быть 1 комп но у каждого работника свой ехе-шник. (чтоб и не повадно было лазить где попало и кнопки лишние глаза не мозолили). Исходя из этих условий рулить 1 отвязанной таблицей явно недостаточно. Нужно прогружать базу на стадии проектирования чтоб была связка с самим принципом построения и заложенными условиями, а там этот пароль. А приложения Borland-а надо чтоб быстро можно было реагировать на изменение ситуации без ущерба для базы данных. Тем более что сам ехе-шник будет трудновато раскурочить без проектных файлов и нанести вред будет труднее, по крайней мере на уровне продвинутого юзера. Есть и еще одна заморочка: при регистрации через SQL-Explorer требует BisualFoxPro ODBC Driver, а в нете присутствует версия для Win95 и 98 по моложе не нашел, и система ХР ее  не признает и инсталить не хочет. В общем если есть идеи или предложения то внимательно вчитываюсь. 

Автор: fish9370 23.7.2007, 20:21
хочется, естественно, тебе предложить перейти на клиент-серверную основу.. взять тот же MySQL.. и решить свои проблемы раз и навсегда.. почему нет?

Автор: MAXIQ 24.7.2007, 12:57
Мда... вот и поуправляли базой данных из Borlanda.... Еще есть у кого варианты по теме только а то забанят, под шумок можно и другие предложения)))

Автор: sexton 24.7.2007, 13:46
Если тебе нужна работа с DBF - Advantage Database Engine тебе в руки.

Добавлено через 11 минут и 21 секунду
Если тебе нужна работа с DBF - Advantage Database Engine тебе в руки.

Автор: fish9370 24.7.2007, 18:30
Цитата(MAXIQ @ 24.7.2007,  12:57)
Мда... вот и поуправляли базой данных из Borlanda.... Еще есть у кого варианты по теме только а то забанят, под шумок можно и другие предложения)))

а что из Борланда управлять MySQL-базой никак?

Автор: MAXIQ 26.7.2007, 12:20
Хотел спросить, а пароль вышибает только  у меня или еще кто-нибудь пробовал прогрузить базу данных FoxPro или Access с тем же результатом. А вообще SQL базой порулить я еще не пробовал, тем и займусь. А к участникам просьба все-таки попробовать грузануть базу, только не BCDEMOS она грузится без вопросов и применяется в качестве примера в литературе (зараза). Хотя может ее скопировать и раскурочить по своему............

Автор: MAXIQ 2.8.2007, 13:49
Пробовал прогрузить базу в элементы со вкладки ADO, с тем же эффектом, пароль захотел. Брал базу у знакомого програмера, а то может моя с глюками, все равно пароля хочет, короче с Borlandom в этом вопросе придется прощаться(( потому, что не факт, что и на MySQL базу реакция с паролем не наступит.

Автор: MAXIQ 13.9.2007, 05:05
В общем вот статья на которую натолкнулся в нете, добрый человек SABROG, подробно объяснил как рулить из Borlanda MySQL базой еще год назад.

--------------------------------------------------------------------
Покопавшись на программерских форумах и форуме MySQL мне удалось таки собрать достаточно информации, чтобы наконец подключиться к MySQL серверу без всяких ADO, ODBC. Ни для кого не секрет, что для того, чтобы ваша программа заработала на другой машине - нужно настраивать DSN в ODBC, а для MySQL сервера на эту машину еще нужно поставить специальный компонент. Можно конечно включить инструкцию для пользователя как настраивать DSN, а также включить тот самый MySQL ODBC драйвер и наверно это будет неплохо в случае, если вы решили заработать денег на тех.поддержке. Далее идет инструкция "Step By Step", все манипуляции проделывались на BCB6.0. Для начала нужно скачать сам MySQL. Мой архив назывался так: mysql-noinstall-6.1.7-beta-win32 (у вас наверно будет поновее). Убедитесь, что вы запустили и настроили MySQL сервер, а также имеете права администратора на нем 
Начнем.

1. Копируем файл из папки lib\opt:
libmysql.dll
в отдельную папку - for_bcb\lib
2. Запускаем командную строку (cmd), переходим в папку где лежит implib:
c:\>n:
n:\>cd N:\Program Files\Borland\CBuilder6\Bin
n:\Program Files\Borland\CBuilder6\Bin>implib -c I:\for_bcb\lib\opt\libmysql.lib I:\for_bcb\lib\opt\libmysql.dll

3. Копируем папку include в папку for_bcb, находим строку:
#define my_socket SOCKET
и меняем ее на:
#define my_socket UINT_PTR
4. Создаем новый проект. 
5. Кидаем на форму Button1 и ListView1. 
6. Ставим свойство ListView1
ViewStyle = vsReport. 
7. Жмем Shift+F11 (Project->Add To Project). 
Выбираем Files of Type->lib, переходим в директорию for_bcb\lib
и выбираем файл libmysql.lib. 
8. Жмем Ctrl+Shift+F11 (Project->Options). Выбираем вкладку "Directories/Conditional". 
Жмем на кнопки с тремя точками в Include Path и Library Path.
В Include Path выбираем директорию for_bcb\include. В Library Path for_bcb\lib.
9. Сохраняем проект.
10. Добавляем две строчки в исходнике (F12):

Код:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#define __LCC__ // эту и
#include <mysql.h> // эту
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
Копируем for_bcb\lib\libmysql.dll в папку куда будет сохраняться скомпилированный
exe файл (обычно в той же директории что и файлы проекта, если речь не о BDS2006)

11. Пример приложения. Не забудьте изменить в коде логин и пароль на свои данные (администраторские). Возможно потребуется также поменять адрес сервера localhost на ваш IP. Программа выполняется SQL запрос к базе данных MySQL и выводит все данные из таблицы `db`

Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "MySQLpmain.h"
#define __LCC__
#include <mysql.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
MYSQL         *Con;
MYSQL_RES     *Res;
MYSQL_ROW      Row;
MYSQL_FIELD   *Fields;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
Con=mysql_init(Con);
Con=mysql_real_connect(Con,"localhost","root","123456","mysql",0,NULL,0);
        if(!Con) ShowMessage("Can not connect.");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        if (Con){
                ListView1->Items->BeginUpdate();
                ListView1->Clear();
   AnsiString query="SELECT * FROM `mysql`.`db`;"; // magic string ;)
   mysql_real_query(Con,query.c_str(),query.Length());
    int f=mysql_errno(Con);
    if(f==0){
      Res=mysql_store_result(Con);
      int CountOfColumns=mysql_num_fields(Res);
      Fields=mysql_fetch_fields(Res);
              for(int i=0;i<CountOfColumns;i++){
              ListView1->Columns->Add();
              ListView1->Columns->Items[i]->Caption = Fields[i].name;
              }
      while ((Row = mysql_fetch_row(Res))){
        TListItem  *ListItem = ListView1->Items->Add();
                for(int j=0;j<CountOfColumns;j++){
                                                if (j == 0){
                                        ListItem->Caption = Row[j];
                                                }else{
                                        ListItem->SubItems->Add(Row[j]);
                                                }
                }
      }
                       ListView1->Items->EndUpdate();
    }else{
        ShowMessage("Error #: " + IntToStr(f) + char(13) + "Message: " + mysql_error(Con));
        }
                }
}
//---------------------------------------------------------------------------

--------------------------------------------------------------------------------
Последний раз редактировалось SABROG, 25.08.2006 в 12:57. 

Автор: Rodman 13.9.2007, 10:00
MAXIQ, совсем не обязательно брать левые компоненты для работы...
мона dbExpress и http://forum.vingrad.ru/index.php?show_type=forum&showtopic=161981 просто положить в нужное место...

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