Форум: "Базы";
Текущий архив: 2006.06.18;
Скачать: [xml.tar.bz2];
ВнизSQL в {CONSOLE APPLICATION} Найти похожие ветки
← →
h8394E (2006-04-18 02:13) [0]Доброго времени суток!
Мне надо обралиться к базе данных FireBird 2.0 из моего консольного приложения. Выполнить SQL запрос из переменной типа TStringList и получить ответ. Конечно, можно скачать FIB компоненты и во время выполнения моей программы выделить память и создать их, они-то VCL. Есть ли просто модули какие-нибудь, чтоб быстренько подключиться, дать логин, пароль, выполнить запрос, получить ответ и всё запомнить? А то мне не очень нравится создание DataBase, Querry и Transaction компонентов в консоли...
← →
Sergey Masloff (2006-04-18 06:12) [1]h8394E (18.04.06 02:13)
>А то мне не очень нравится создание DataBase, Querry и Transaction компонентов в консоли...
Почему? Им параллельно где их создают.
Напрямую можно используя клиентский API InterBase. Я тут приводил как-то примитивный код. Спрашивавший решил что ну его на фиг лучше создать компоненты ;-)))
Пример на це см. в
{FBDir}/Examples/Api3.c
Переписать на паскале не проблема но код еще увеличится да и заголовки свежие паскалевские искать надо будет
← →
Desdechado © (2006-04-18 11:30) [2]TDatabase и TQuery вовсе не обязательно бросать на форму или датамодуль, чтоб ими воспользоваться
достаточно сделать
qry:=TQuery.Create( Application ) // зацепит в себя модуль Forms
или
qry:=TQuery.Create( nil ) // нет хозяина у компонента, ОБЯЗАТЕЛЬНО вручную разрушать
и в finally сделать таким Free
← →
h8394E (2006-04-18 16:53) [3]А будет ли это достаточно быстро? В смысле, когда запускаешь форму, в основном, они-то уже подключены к бд. А тут - время на создание, подключение, поиск, анализ и разрешение. Просто моя консоль как cgi подапачем выполняется.
← →
Desdechado © (2006-04-18 17:02) [4]если на каждое обращение ты с нуля все пересоздаешь, то долго (причем основное время - подключение)
посмотри в сторону веб-сервиса, постоянно висящего и держащего подключение (или пул подключений)
← →
h8394E (2006-04-18 17:57) [5]Desdechado, к сожалению, ни того ни другого я не знаю... Вот, мне с FireBird 2.0 пришла программа - консоль "Firebird ISQL tool". Может мне через пайпы к ней присоединиться и писать туда?
← →
h8394E (2006-04-18 18:21) [6]Или, может вы посоветуете, какую, нить базу данных, что б было легко и быстро делать
> создание, подключение, поиск, анализ и получение ответа
← →
h8394E (2006-04-18 18:25) [7]Мне просто не нужны все эти обработки ошибок, откаты о так далее. Мне надо бастрая записть, поиск и чтение из файла.
← →
Плохиш © (2006-04-18 18:37) [8]
> Мне просто не нужны все эти обработки ошибок, откаты о так
> далее.
> В смысле, когда запускаешь форму, в основном, они-то уже
> подключены к бд.
Неужели кому-то ещё нужны такие программы? 8-O
← →
h8394E (2006-04-18 18:43) [9]Sergey Masloff,
> Пример на це см. в
> {FBDir}/Examples/Api3.c
>
> Переписать на паскале не проблема но код еще увеличится
> да и заголовки свежие паскалевские искать надо будет
А ты переписать не сможешь? Или может кто знает где найти, а то я в си знаю только что такое
int idiot;
← →
h8394E (2006-04-18 21:15) [10]Вот, PHP подключается к базе данных как раз так, как мне надо! У кого-нить есть исходники PHP?
← →
h8394E (2006-04-19 02:13) [11]А если я DataModule добавлю. Вставлю туда компоненты и подсоединю их ещё в design-time, это ничего не изменит?
← →
Сокол © (2006-04-19 12:29) [12]Создавай компоненты в runtime, тормозов нет абсолютно никаких, проверено почти на всех БД, только не используй ADO-компоненты - в консольном приложении с ними есть проблеммы.
← →
Desdechado © (2006-04-19 12:35) [13]я ж говорил - основные тормоза при подключении к БД
если у тебя подключение единожды, то все и без датамодуля работать будет
если оно у тебя для каждого обращения к cgi извне, то будут тормоза в любом случае
← →
Сокол © (2006-04-19 12:43) [14]Тормоза при подключении у меня были только с СУБД IBM DB2, работающе по OS/400 на серверах iSeries AS/400, с остальными все нормально. Хотя здесь все еще зависит от железа, на котором работаешь.
← →
atruhin © (2006-04-19 13:13) [15]Нет ни каких проблем с консольным подключением. При запуске программы содаешь и подключаешь Database, остальное по мере надобности. Только IB компненты по моему всегда тянут VCL, поэтому советую купить FIB, там есть опция - не использовать VCL
← →
jack128 © (2006-04-19 14:38) [16]Сокол © (19.04.06 12:29) [12]
Создавай компоненты в runtime, тормозов нет абсолютно никаких, проверено почти на всех БД, только не используй ADO-компоненты - в консольном приложении с ними есть проблеммы
? Почему? Если ты забыл com инициализировать, то это еще не проблема..
atruhin © (19.04.06 13:13) [15]
Только IB компненты по моему всегда тянут VCL,
нет, не тянут они VCL
program Project3;
uses
SysUtils, Forms;
begin
end.
занимает 387082, аprogram Project3;
304640. Делай выводы.
uses
SysUtils, IBDatabase;
begin
end.
PS Delphi2006
← →
atruhin © (2006-04-19 14:47) [17]
> нет, не тянут они VCL
Посмотрел, согласен ошибся. Я с ними не работаю по тому и написал - по моему :). В FIB отдельная директива компиляции, но все равно советую их купить, если с FB работать. Причин достаточно.
← →
sniknik © (2006-04-19 15:02) [18]в D7 всетаки, чтото тянут. надо все initialization в модуле просмотреть...
program Project1;
- 14 848
begin
end.program Project1;
- 40 448
uses
SysUtils;
begin
end.program Project1;
- 285 184
uses
SysUtils, IBDatabase;
begin
end.
D7 соответственно.
← →
sniknik © (2006-04-19 15:04) [19]да, с формами (SysUtils, Forms;) - 367 616
для полноты картины.
← →
h8394E (2006-04-19 15:48) [20]Размер моей программы не важен! А подключение к базе будет делаться два запроса из трёх, т.е. только 3й запрос не обращается к бд.
Мне тут всё-таки скорость важна. Моя машина P4 3200 MHz 1024мб ОЗУ 500Гб HDD(кеш - 16мб).
Так же хотел спросить, а если я старым методом делать буду, т.е.:
Type TFileData = record
a, b, c:integer;
d, e, f:char;
end;
var
DataFile:file of TFileData;
fileData:TFileData;
bagin
AssignFile(DataFile, "c:\file.dat");
//НУ И ТАК ДАЛЕЕ
Это будет искать(циком) так же, как и FireBird, или медленнее? Есть ли другой метод поиска? Количество записей в базе будет до 15000, с 28 переменными в каждом.
← →
ANB © (2006-04-20 12:17) [21]
> h8394E (19.04.06 15:48) [20]
Какие проблемы ?
В начале своей консольной программы создаешь объект для коннекта и коннектишься.
Можешь сразу насоздавать нужные объекты для выполнения запросов.
Потом, в ходе работы - запихнул SQL запрос в объект и выполнил его. Это будет так же шустро, как при работе в обычном приложении.
Кстати, кто тебе сказал, что если подключение сделать в дизайн-тайме, то будет быстрее ?
← →
ANB © (2006-04-20 12:18) [22]
> Type TFileData = record
> a, b, c:integer;
> d, e, f:char;
> end;
>
> var
> DataFile:file of TFileData;
> fileData:TFileData;
>
> bagin
> AssignFile(DataFile, "c:\file.dat");
> //НУ И ТАК ДАЛЕЕ
А вот так ты искать точно повесишься. Для начала нужно будет узнать формат файла БД.
← →
h8394E (2006-04-20 17:07) [23]ANB, ты наверное не заметил, что я говорил, что моя консоль - это cgi скрипт. Т.е. она выкидывает в буфер вывода данные и сразу закрывается, по этому мне и нужна скорость.
> А вот так ты искать точно повесишься. Для начала нужно будет
> узнать формат файла БД.
А при чём тут формат файла? Я его сам создаю. Я имел ввиду, а что если базу данных самому так создать? Поиска в ней будет медленнее или такой же? Это даже не база получится а нечто вроде текстового файла.
Также пришла идея - а что если при первом запуске приложения она экспортирует в память dll, в которая подключается к базе данных, но при выходе dll из памяти не удалять. А при повторной загрузке и dll уже загружена будет, и подключена к бд тоже будет. Вот только как такое организовать на Delphi?
← →
atruhin © (2006-04-20 19:10) [24]
> ANB, ты наверное не заметил, что я говорил, что моя консоль
> - это cgi скрипт.
Покажи в вопросе или в теме строку где ты говорил, что это cgi скрипт, а то я тоже не заметил.
← →
h8394E (2006-04-20 19:22) [25]atruhin, третий пост, последняя строчка:
> Просто моя консоль как cgi под апачем выполняется.
← →
atruhin © (2006-04-20 19:40) [26]С cgi скриптама не работал, но что приходит в голову:
1. избавится от скрипта и реализовать на php и тд.
2. 3 звенка, т.е. сервер приложений+cgi
← →
h8394E (2006-04-20 19:46) [27]atruhin, аой 23 пост посмотри - можно ли к бд в dll подключаться, и держать dll всё время?
← →
atruhin © (2006-04-20 19:54) [28]Не работал я с cgi скриптами, но мне кажется что он подгружается и выгружется по требованию клиента. Если это не так, и dll можно оставить загруженной, то естественно к бд подключемся 1 раз и держим подключение
← →
Sergey Masloff (2006-04-20 21:02) [29]atruhin © (20.04.06 19:54) [28]
Нет клиент это веб сервер. Он получает запрос вызывает exe и что тот напишет в STDOUT отдает клиенту. Все.
← →
Sergey Masloff (2006-04-20 21:05) [30]Вообще же по сабжу:
1) Измерить производительность в реальных условиях. Может все не так медленно. Само по себе создание процесса дело небыстрое на его фоне может и нормально будет.
2) Сделать сервер приложений cgi будет к нему стучаться за данными. Но межпроцессное взаимодействие тоже не самая быстрая операция.
← →
h8394E (2006-04-21 00:37) [31]Sergey Masloff, а если создавать свой файл с "базой данных", как я показал в примере выше - поиск в нём будет достаточно быстр?
← →
atruhin © (2006-04-21 06:11) [32]
> поиск в нём будет достаточно быстр?
Все зависит от задачи, и от того, что ты подразумеваешь под поиском. Но в целом вряд ли ты сам реализуешь поиски из файла быстрее чем это делает SQL сервер
← →
DSKalugin © (2006-04-21 17:32) [33]А что мешает сделать все это на PHP? зачем городить собственнописные подключения к базе, если все это уже сделано?
PHP поддерживает прямую работу с Firebird через клиентскую библиотеку gds32.dll, смотри функции начинающиеся на ibase_*
http://ua.php.net/ibase
P.S. Я сам неоднократно этим пользовался
← →
h8394E (2006-04-21 21:40) [34]Хорошо, всем большое спасибо!
← →
Sergey Masloff (2006-04-21 22:09) [35]atruhin © (21.04.06 06:11) [32]
>Все зависит от задачи, и от того, что ты подразумеваешь под поиском. Но в >целом вряд ли ты сам реализуешь поиски из файла быстрее чем это делает >SQL сервер
Да ну ;-)
Смотря сколько данных в файле. Если строк с 1000 скажем из файла прямым перебором будет намного быстрее без всяких усилий.
← →
atruhin © (2006-04-21 22:25) [36]
> Смотря сколько данных в файле.
> Количество записей в базе будет до 15000, с 28 переменными
> в каждом.
Все таки думаю сервер быстрее справится. Я не рассматриваю вариант организации индекса.
← →
Sergey Masloff (2006-04-21 22:43) [37]atruhin © (21.04.06 22:25) [36]
Никаких индексов. Просто тупой перебор. Файл будет быстрее сервера.
Это как раз тот случай когда нужно не думать а проверять.
Том Кайт в своих статьях и книгах постоянно приводит примеры что бывает когда люди слишком много думают и слишком мало проверяют результаты своих измышлений ;-)))
← →
atruhin © (2006-04-22 06:54) [38]Посмотри первоначальный пост. Т.е. программа на каждый запрос загружается и выгружается. Соответственно: Считать весь файл (15000 записей*28 полей), произвести поиск, закрыть файл. У сервера файл в кэше + поиск по индексам. Эх быстрее будет.
← →
Sergey Masloff (2006-04-22 07:12) [39]atruhin © (22.04.06 06:54) [38]
У ОС файл тоже в кеше ;-)
Я действительно число записей просмотрел. На паре тысяч записей перебор файла быстрее интербеза, оракла и mssql и намного - я проверял ;-)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.06.18;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.012 c