Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Мощная библиотека для работы с SQL базами данных, предлагаю оценить и обсудить! 
:(
    Опции темы
Святогор
Дата 24.7.2008, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 9.8.2006

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



Коллеги, делфисты!
Это не совсем реклама. Просто наша контора уже давно разработала и пользуется очень удобным средством для работы с SQL базами данных. Вот, решили оформить всё это дело(открытый исходный код) и выложить на ваш суд. Итак...

Библиотека HitSQL предназначена  для "продвинутой" работой с SQL базами данных. Включает в себя все аспекты:  от соединения с сервером базы данных, формированием запроса, созданием и контролем транзакций и заканчивая получением данных по результатам запроса.

Код

type     
 
TCountry = class(TIdTable)    
private        
  FValue: TString50;    
published        
  property Value: TString50 read FValue write FValue;    
end;   
 
TEmployees = class(TidTable)    
private        
  FFirstName: TString50;        
  FSecondName: TString50;        
  FCountry: TCountry;        
  FSalary: TFloat;    
published        
  property FirstName: TString50 read FFirstName write FFirstName;        
  property SecondName: TString50 read FSecondName write FSecondName;        
  property Country: TCountry read FCountry write FCountry;        
  property Salary: TFloat read FSalary write FSalary;   
end;


Подобно технологии ORM (<i>Object Relation Mapping</i>), для работы с HitSQL необходимо описывать метаданные базы данных посредством декларации объектов специального вида, совпадающих по структуре со структурой базы данных и полей таблиц. 

В качестве компонент для доступа к базам данных, в данный момент библиотека поддерживает следующие возможности: ADO (Microsoft ADO), FIB, ZDO (ZeosLib). Поддерживаемые диалекты: Microsoft SQL Server, Interbase/Firebird, MySQL.

Пример получения набора данных:

Код

function GetEmployeesList: TDataSet;  
var      
  Query: IQuery;      
  Tx: IReadOnlyTx;  
begin      
  Tx := ConnectionPool.ReadOnlyTx;      
  with TEmployees.Create do          
    Query := Select(FirstName, SecondName, Country).OrderBy(SecondName);      
  Result:= Tx.SelectDataSet(Query);  
end;

Пример добавления данных:

Код

var      
  Tx: IReadWriteTx;  
begin      
  Tx := ConnectionPool.ReadWriteTx;      
  with TEmployees.Create do          
    Tx.Execute(Insert([FirstName.SetTo('John'), SecondName.SetTo('Doe')]));      
  Tx.Commit;  
end;


Пример модификации данных:

Код

var      
  Tx: IReadWriteTx;  
begin      
  Tx := ConnectionPool.ReadWriteTx;      
  with TEmployees.Create do          
    Tx.Execute(Update([FirstName.SetTo('Jane')]).Where(SecondName.Equals('Doe')));      
  Tx.Commit;  
end;


И ещё масса возможностей по работе с базами данных.
Версия с открытым кодом библиотеки выпускается под GPL v.3 лицензией.
Страничка на sourceforge http://hitsql.wiki.sourceforge.net/rus

Добавлено через 1 минуту и 6 секунд
Оставляйте отзывы, пожалуйста!
PM MAIL   Вверх
Akella
Дата 24.7.2008, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Я извиняюсь, но я не понял, для чего всё это? Допустим я работаю с БД (Firefird, Fib+), что мне даст эта мощная библиотека?

Добавлено через 1 минуту и 40 секунд
На сколько я понял, то программист работает с библиотекой, не заботясь о том, какая СУБД и какие компоненты доступа? Или как?
PM MAIL   Вверх
Святогор
Дата 25.7.2008, 07:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 9.8.2006

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



Цитата(Akella @ 24.7.2008,  16:47)
Я извиняюсь, но я не понял, для чего всё это? Допустим я работаю с БД (Firefird, Fib+), что мне даст эта мощная библиотека?


Поддержка FireBird имеется.
Что даст? Например такие приемущества:
  • Отказ от текстовых запросов. Разработчиком используется объектная модель классов соответствующая структуре базы данных;
  • Создание бизнес логики связанной с БД практически независимой от используемого диалекта, другими словами это позволит разработчику без особых усилий перейти, к примеру, с MSSQL на Interbase и наоборот;
  • Строгая типизация и структуризация данных, которая позволяет при формировании запросов использовать сочетание клавиш Ctrl+пробел;
  • Упрощение рефакторинга кода связанного с запросами. При изменении/удалении таблиц/полей нет необходимости просматривать все текстовые запросы. Достаточно изменить метаданные ровно в одном месте и компилятор укажет все зависимые места.
  • Поддержка многопоточности;
  • Повышение читабельности запросов;
  • Обертка результатов выборки в переменные, динамические массивы и др.;
  • Возможность просмотра лога запросов;


//На сколько я понял, то программист работает с библиотекой, не заботясь о том, какая СУБД и какие компоненты доступа? Или как?

И это тоже. Но не самое важное.
Самое важное: отказ от хранимых процедур. Перенос всей бизнес-логики в Делфячный код, его контроль и отладка средствами Делфи.

PM MAIL   Вверх
Vas
Дата 25.7.2008, 07:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Цитата(Святогор @  25.7.2008,  07:22 Найти цитируемый пост)
Отказ от текстовых запросов. Разработчиком используется объектная модель классов соответствующая структуре базы данных;

Сложные рекурсивные запросы как писать?

Цитата(Святогор @  25.7.2008,  07:22 Найти цитируемый пост)
# Повышение читабельности запросов;

Что-то мне кажется наоборот, тем кто читает SQL запросы легко и не принужденно будет проблематично перейти к вашей записи. 

Код

var      
  Tx: IReadWriteTx;  
begin      
  Tx := ConnectionPool.ReadWriteTx;      
  with TEmployees.Create do          
    Tx.Execute(Insert([FirstName.SetTo('John'), SecondName.SetTo('Doe')]));      
  Tx.Commit;  
end;

Скажите плиз как здесь можно использовать параметры???

Цитата(Святогор @  25.7.2008,  07:22 Найти цитируемый пост)
Самое важное: отказ от хранимых процедур. 

Жирный минус!!! В серверных БД ХП огромный плюс, можно например долгий расчет выполнить строго на сервере (они как обычно мощные машины) всего лишь запуском ХП. А вы предлагаете от этого отказаться и делать все на клиенте, обратно к dBase возврат  smile 



--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Akella
Дата 25.7.2008, 07:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



ну я пока вижу 1 плюс: это кроссСУБДность smile

Добавлено через 21 секунду
а как мне отказаться от всех прелестей FIB+?
PM MAIL   Вверх
Святогор
Дата 25.7.2008, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 9.8.2006

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



Цитата(Vas @ 25.7.2008,  07:43)
Цитата(Святогор @  25.7.2008,  07:22 Найти цитируемый пост)
Отказ от текстовых запросов. Разработчиком используется объектная модель классов соответствующая структуре базы данных;

Сложные рекурсивные запросы как писать?

Скажите плиз как здесь можно использовать параметры???

Цитата(Святогор @  25.7.2008,  07:22 Найти цитируемый пост)
Самое важное: отказ от хранимых процедур. 

Жирный минус!!! В серверных БД ХП огромный плюс, можно например долгий расчет выполнить строго на сервере (они как обычно мощные машины) всего лишь запуском ХП. А вы предлагаете от этого отказаться и делать все на клиенте, обратно к dBase возврат  smile

//Сложные рекурсивные запросы как писать?

Пример простого рекурсивного запроса можно?

//Скажите плиз как здесь можно использовать параметры???

Какие именно?
Такие:
Код

var      
  Tx: IReadWriteTx;  
  s: string;
  I: Integer;
begin      
  Tx := ConnectionPool.ReadWriteTx;   
  s := 'Someone';
  I := 10;
  with TEmployees.Create do          
    Tx.Execute(Insert([FirstName.SetTo(s)]).Where(id.Equals(I));      
  Tx.Commit;  
end;

?

//Жирный минус!!! В серверных БД ХП огромный плюс, можно например долгий расчет выполнить строго на сервере (они как обычно мощные машины) всего лишь запуском ХП. А вы предлагаете от этого отказаться и делать все на клиенте, обратно к dBase возврат 

Вы не поняли.  smile 
Отказ, это значит, что надежнее разрабатывать трёхзвенки, чтобы АппСервер работал на стороне сервера и там была прописана вся бизнес-логика на Вашем языке(в нашем случае на Делфи). Т.е. это просто замена языка ХП на язык Делфи. Можно спокойно отлаживать и контролировать код бизнес-логики в своей любимой среде и на своем любимом языке, а не на внутренних скриптовых языках СУБД.
Воть.

//а как мне отказаться от всех прелестей FIB+?

А какие именно прелести?
PM MAIL   Вверх
pseud
Дата 25.7.2008, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



ИМХО - очень хорошая идея.
но для начала надо бы изучить код, как все это работает.
сам пытался такое дело реализовать. но, видимо, одной головы мало.


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Святогор
Дата 25.7.2008, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 9.8.2006

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



Цитата(pseud @ 25.7.2008,  09:56)
ИМХО - очень хорошая идея.
но для начала надо бы изучить код, как все это работает.
сам пытался такое дело реализовать. но, видимо, одной головы мало.

Там можно скачать пример. Правда, он работает под MS SQL.
PM MAIL   Вверх
Akella
Дата 26.7.2008, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(Святогор @  25.7.2008,  09:36 Найти цитируемый пост)
//а как мне отказаться от всех прелестей FIB+?

А какие именно прелести? 

ну взять хотябы как минимум - это conditions, построение и управление конструкцией where запроса.
у ещё у фибов есть "умный" фильтр smile
макросы
ну хватает там вкусностей, не зря же это лучшая библиотека для работы с ibase, fb.
PM MAIL   Вверх
Vas
Дата 26.7.2008, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Цитата(Святогор @  25.7.2008,  09:36 Найти цитируемый пост)
Пример простого рекурсивного запроса можно?

Можно, на ORACLE это выглядит так:
Код

select lpad(' ',2*(level-1)) || to_char(child) s 
  from test_connect_by 
  start with parent is null
  connect by prior child = parent;

Результат ветвь:
Код

38
  15
    10
    5
      2
      3
  17
    9
    8
  6
26
  13
  1
  12
18
  11
  7



--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Kbl4AH
Дата 7.8.2008, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 6
Всего: 15



2Святогор А напиши, пожалуйста, следующий запрос в своем средстве, а то я плохо представляю, как можно обойтись без явного SQL:
Код

select * from table1
where
id in (select id from table2 where lower(name) like '%:LettersOfName%')
and
not (trunc(sysdate, 'dd') > to_date(nvl(data, '31.12.3000'), 'dd.mm.yyyy'))


Это сообщение отредактировал(а) Kbl4AH - 7.8.2008, 12:43
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

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

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


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


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

FAQ раздела лежит здесь!


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

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


 




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


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

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