Все вопросы связанные с программированием. Языки программирования. Средства разработки.
Аватара пользователя
Borr
Не в сети
Частый гость
Частый гость
Сообщения: 338
Зарегистрирован: Ср сен 15, 2004 17:14
Откуда: Шахты
Контактная информация:

C++ Builder подключение к БД!

Сообщение Borr »

Я эту тему создал 'выставляя пальцы веером' чисто из желания не дать разделу умереть безвременно, поддержать dBaser'a (интересные темы были пока только от него -- с Access'om мне понравилось), и естессно послушать критику только внятную....
И так делаем прогу которая только просматривает dbf файлы.
Создаем текстовый файл
[ODBC]
DRIVER=Microsoft dBase Driver (*.dbf)
UID=admin
UserCommitSync=Yes
Threads=3
Statistics=0
SafeTransactions=0
PageTimeout=600
MaxScanRows=8
MaxBufferSize=2048
FIL=dBase 5.0
DriverId=533
Deleted=1
DefaultDir=C:\
CollatingSequence=ASCII
обзываем его dbf.dsn
В С++ Buildere добовляем на форму StringGrid, Edit и два Button'a, но и это еще не все еще ADOQuery и OpenDialog. А и еще ADOConnection
По Button1 двойным кликом и в появившееся окно вставляем

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

if(OpenDialog1->Execute())
{
Edit2->Text=OpenDialog1->FileName;
} 
Потом по Button2 двойной клик и между {} вставляем

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

if(Edit1->Text!="")
{
AnsiString fil;
AnsiString Cur=GetCurrentDir();
for(int i=1;i<=StringGrid1->RowCount;i++)
StringGrid1->Rows[i]->Clear();
StringGrid1->RowCount=2;
TStringList *Str=new TStringList;
Str->Add("[ODBC]");
Str->Values["DRIVER"]="Microsoft dBase Driver (*.dbf)";
Str->Values["UID"]="admin";
Str->Values["UserCommitSync"]="Yes";
Str->Values["Threads"]="3";
Str->Values["Statistics"]=0;
Str->Values["SafeTransactions"]=0;
Str->Values["PageTimeout"]=5;
Str->Values["MaxScanRows"]=8;
Str->Values["MaxBufferSize"]=2048;
Str->Values["FIL"]="dBase 5.0";
Str->Values["DriverId"]=533;
Str->Values["Deleted"]=1;
Str->Values["DefaultDir"]=ExtractFileDir(Edit1->Text);
Str->Values["CollatingSequence"]="ASCII";
Str->SaveToFile(Cur+"\\dbf.dsn");
ADOConnection1->Connected=false;
ADOConnection1->ConnectionString="FILE NAME="+Cur+"\\dbf.dsn";
//ADOConnection1->Provider=Cur+"\\dbf.dsn";
ADOConnection1->Connected=true;
TStringGrid *SG=StringGrid1;
ADOQuery1->Connection=ADOConnection1;
ADOQuery1->Close();
ADOQuery1->SQL->Text="SELECT * FROM "+ExtractFileName(Edit1->Text);
ADOQuery1->Open();
SG->ColCount=ADOQuery1->FieldCount+1;
SG->RowCount=ADOQuery1->RecordCount+1;
for(int t=0;t<ADOQuery1->FieldCount;t++)
{
fil=ADOQuery1->Fields->Fields[t]->FieldName;
SG->Cells[t+1][0]=fil;
ADOQuery1->First();
for(int i=1;i<=ADOQuery1->RecordCount;i++)
{
if(ADOQuery1->FieldByName(fil)->AsString!="")
SG->Cells[t+1][i]=ADOQuery1->FieldByName(fil)->AsString;
else
SG->Cells[t+1][i]="NULL";
ADOQuery1->Next();
}
}
delete Str;//гы гы лечиться лечиться и еще раз лечиться. Хотя память ее не жалко - метр туда метр сюда и готова :) совсем готова :( мир ее памяти :((
//Str->Clear();
}
else
Application->MessageBox("Где карта, Билли нам нужна карта","Ошибка",MB_OK);
Все должно работать :D
Я не делал коменты, но готов ответить где что деиться, и без нервов послушать все замечания, кроме:'голосом нудной старушки' для этого там DBGrid есть. СССразу отвечаю от DBGrida отказался ибо прога тогда былабы не так визуальна (всмысли кода тогда бы вообще не надо было)
Последний раз редактировалось Borr Вт апр 19, 2005 8:56, всего редактировалось 4 раза.
Стой там, иди сюда

Аватара пользователя
dBaser
Не в сети
СуперМодератор
СуперМодератор
Сообщения: 1202
Зарегистрирован: Вт дек 09, 2003 11:50
Контактная информация:

Сообщение dBaser »

Прикольно!
Borr писал(а):SG->ColCount
SG->RowCount
А че это делает?



Вобще мне понравилось... если учесть что с С++ я не работаю то на таких примерах и нужно учиться...
Критиковать - это показывать автору, как бы делал я, если бы умел.
-------
Продаются мужские часики. Один часик - 50 долларов.

Аватара пользователя
Borr
Не в сети
Частый гость
Частый гость
Сообщения: 338
Зарегистрирован: Ср сен 15, 2004 17:14
Откуда: Шахты
Контактная информация:

Сообщение Borr »

Чтобы не писать все время S-t-r-i-n-gGrid создаем в памяти на него указатель

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

TStringGrid *SG=StringGrid1;
А SG->ColCount и SG->RowCount устанавливает количество колонок и строк, соответственно, которые будут видны у SG см по коду мы устанавливаем количество строк SG= количеству строк полученных запросом (ADOQuery1).
К стати я дал именно такой пример на котором легче всего начать ваять свои! клиенты для БД. Есть конечно много вариаций но начать с чего-то надо почему бы не с ADO.
Кстати к БД Access можно подключиться этим же путем
Стой там, иди сюда

Iron Man
Не в сети
Частый гость
Частый гость
Сообщения: 176
Зарегистрирован: Пн фев 07, 2005 14:03

Сообщение Iron Man »

Borr
подделашный драйвер :cheesy:
Kill your Self >> save the Planet

Аватара пользователя
Borr
Не в сети
Частый гость
Частый гость
Сообщения: 338
Зарегистрирован: Ср сен 15, 2004 17:14
Откуда: Шахты
Контактная информация:

Сообщение Borr »

Я ж просил
Borr писал(а):и естессно послушать критику только внятную....
Стой там, иди сюда

Аватара пользователя
c0der
Не в сети
Новичок
Новичок
Сообщения: 45
Зарегистрирован: Ср апр 14, 2004 15:06

Сообщение c0der »

критика:

ошибка - утечка памяти:
TStringList *Str=new TStringList;
отсутствует delete Str

оформление и стилистика кода просто ужастное, отсутствуют отступы от начала строки (это что-то), отстутствуют пробелы до и после операторов (очень неудобно читать "аравноб", лучше "а равно б"), и ещё, читабельнее будет так:
if ( )
{
мало кода
}
else
{
много кода
много кода
много кода
много кода
много кода
много кода
много кода
много кода
много кода
много кода
много кода
}

нежели вот так

if ( )
{
много кода
много кода
много кода
много кода
много кода
много кода
много кода
много кода
много кода
много кода
много кода
}
else
{
мало кода
}
rep movsd

Аватара пользователя
Borr
Не в сети
Частый гость
Частый гость
Сообщения: 338
Зарегистрирован: Ср сен 15, 2004 17:14
Откуда: Шахты
Контактная информация:

Сообщение Borr »

Про утечку памяти согласен не досмотрел. Просто это не весь код а более или менее логически завершенный кусок, вырванный из моего приложения.
Там Str->Clear(); я не дочитал мне что-то казалось... каюсь....
А про оформление ну кому как нравиться. Еще коменты обязательно, но об этом я уже извинялся.
Но радует, что хоть кто-то прочел мои излияния, при чем до полного понимания.
Стой там, иди сюда

Аватара пользователя
Borr
Не в сети
Частый гость
Частый гость
Сообщения: 338
Зарегистрирован: Ср сен 15, 2004 17:14
Откуда: Шахты
Контактная информация:

Сообщение Borr »

РРРаз такое дело продолжаем практикум по C++ Buider'y
Сегодня запусти какой ни какой mp3 файл (по простому)
Запускаем Builder он сразу должен создать новый проект. Помещаем на форму кнопку и элемент MediaPlayer с закладки System (в его свойствах , см панел слева меняем Name с MediaPlayer1 на Music, а Visible в false) по ней 2 раза.
На появившмся окне редактора выбираем закладку Unit1.h сюда добовляем (если нету) запись #include <MPlayer.hpp> (она должна идти до строчки class TForm1 : public TForm)
Теперь щелкаем по закладке Unit1.hpp и между скобками { } вставляем код

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

Music->FileName="D:\\Musik\\Ind\\01_Mein herz brennt.mp3";
Music->Open();
Music->Play();
Естественно путь и название муз файла ставим свой (обращаю ваше особое внимание в строке пути должен быть везде двойной слеш - \\ а сама строка должна быть в двойных кавычках в любом случае)
Компилим (зеленая стрелачка на панели управления или просто F9) кликаем по кнопке и слушаем вашу любимую музыку в испалнении вашего родного медиа плеера. Как облагородить его??? Ну как говорят херурги в таких случаях -- дальше без меня, дальше вы сами
Стой там, иди сюда

Iron Man
Не в сети
Частый гость
Частый гость
Сообщения: 176
Зарегистрирован: Пн фев 07, 2005 14:03

Сообщение Iron Man »

Borr
Системные требования у этого проекта- минимум win2k. Если на 9x не поставить кодек mp3- работать не будет :cry:

Как вариант можно исользовать бесплатную библиотеку BASS.DLL.
Ссылка на тему
http://faq.pp.ru/forums/lofiversion/index.php/t834.html
Kill your Self >> save the Planet

Аватара пользователя
Borr
Не в сети
Частый гость
Частый гость
Сообщения: 338
Зарегистрирован: Ср сен 15, 2004 17:14
Откуда: Шахты
Контактная информация:

Сообщение Borr »

А значит, то что он играет все время одн и тотже файл уже никого не волнует???
Да а еще тут не хватает ListView процедур сохранения созданного листа в файл, извлечение данных листа из файла, выбор файлов\директорий для проигрывания, не говоря уже о таких основных вещах как стоп, пауза, следующий из листа предидущий. А и лепить, формы друг к другу, еще можно как в винампе...

Я же там написал -- пример для затравки.
Стой там, иди сюда

Iron Man
Не в сети
Частый гость
Частый гость
Сообщения: 176
Зарегистрирован: Пн фев 07, 2005 14:03

Сообщение Iron Man »

Borr
Ну вот! Затравка сработала! :mrgreen: :mrgreen: :mrgreen:
Kill your Self >> save the Planet

Аватара пользователя
Borr
Не в сети
Частый гость
Частый гость
Сообщения: 338
Зарегистрирован: Ср сен 15, 2004 17:14
Откуда: Шахты
Контактная информация:

Сообщение Borr »

Как лист (список мелодий отрабатывать) надо показывать? (Через ListView)
Стой там, иди сюда

Iron Man
Не в сети
Частый гость
Частый гость
Сообщения: 176
Зарегистрирован: Пн фев 07, 2005 14:03

Сообщение Iron Man »

Borr
Да, лучше наверное через ListView, из стандартных компонентов это самый лучший вариант. При желании можно сделать ручную прорисовку и всяких эффектиков туда навставлять )
Вся проблема в создании конкурентноспособного плеера это кодеки + визуализация + внешний вид... плееры относятся к той небольшой категории прог, которым нужны skin'ы.
Kill your Self >> save the Planet

Аватара пользователя
Borr
Не в сети
Частый гость
Частый гость
Сообщения: 338
Зарегистрирован: Ср сен 15, 2004 17:14
Откуда: Шахты
Контактная информация:

Сообщение Borr »

Судя по всему нас тут три человека и у всех разные пристрастия... Я об этом говорил.. А спрашивал я интерисующиеся есть - как организовать плей лист для своей поделки - плеера? Могу помоч советом...
Стой там, иди сюда

Аватара пользователя
TOSHIK
Не в сети
Администратор
Администратор
Сообщения: 6596
Зарегистрирован: Пт авг 08, 2003 13:49
Откуда: Ростов-на-Дону
Контактная информация:

Сообщение TOSHIK »

Iron Man писал(а):категории прог, которым нужны skin'ы.
пользуюсь Apollo к которому скинов неу изначально. И полностью удовлеворен им как плеером. Я же музыку слушаю, а не на красивые кнопки любуюсь...
Активисты все еще ищутся здесь!

Ответить