Форум: "Базы";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];
ВнизУскорение выполнения SQL - запросов Найти похожие ветки
← →
saNat © (2004-07-24 00:55) [0]Доброго времени суток.
Сейчас работаю над первым реальным проектом. Нужно написать БД. Не хотелось использовать визуальные компоненты bd*, поэтому использую запросы SQL. Однако при их выполнении возникают задержки, причем достаточно заметные.
Подскажите пожалуйста, что можно сделать для ускорения работы. Могу скинуть на Ваш E-Mail исходники (~90Kb в архиве)
С уважением, ЕВА
← →
GanibalLector © (2004-07-24 01:13) [1]>Сейчас работаю над первым реальным проектом
Реальные проекты на парадоксе не делаются.
>Не хотелось использовать визуальные компоненты bd*, поэтому использую запросы SQL
А вот тут я вообще ничего не понял...
>Могу скинуть на Ваш E-Mail исходники
Давай посмотрим...Talla2k#ukr.net
← →
Fay © (2004-07-24 18:37) [2]Кидай, поглядим.
← →
saNat © (2004-07-25 00:13) [3]to Fay: анкета недоступна...
← →
viktor (2004-07-25 00:18) [4]Запросы через ХП?
← →
DrPass © (2004-07-25 01:07) [5]
> Запросы через ХП?
Особенно в Парадоксе
← →
Fay (2004-07-25 03:26) [6]2saNat © (25.07.04 00:13) [3]
На ник нажать не судьба?
← →
saNat © (2004-07-25 10:49) [7]Именно - Paradox в ХР.
← →
saNat © (2004-07-25 11:00) [8]to GanibalLector, Fay: выслал исходники...
← →
GanibalLector © (2004-07-25 23:38) [9]2 saNat
Посмотрел я эти исходники... :(
Никак не могу понять,почему не использовать тот же DBGrid?У Вас нет ни одного .Вы,по непонятным мне причинам,после выполнения запросов результаты перебрасываете в StringGrid и подобные.И,именно на этом,и получаете задержки от которых хотите избавиться.
З.Ы. ИМХО меняйте StringGrid-ы на DBGrid-ы.И пора уже забыть Парадокс.Фиб,Интербес бесплатны и намного лучше.
← →
saNat © (2004-07-25 23:59) [10]to GanibalLector: Сомневаюсь, что дело в использовании StringGrid вместо DBGrid. Мне показалось, что тормоза в момент вызова SQL.Open... Хотя может быть я не прав.
Не знаю я преимуществ InterBase перед Paradox"ом. У меня был выбор между Oracle и Paradox - для данной задачи все очевидно. После завершения обращу внимание на IB.
← →
Fay © (2004-07-26 02:26) [11]2saNat © (25.07.04 23:59) [10]
1) Чем Вам Oracle не угодил?!
2) Не стоит заканчивать под рагадохом. Переход займёт не больше одного дня. И сразу счастье! 8)
← →
saNat © (2004-07-26 07:27) [12]> Fay © (26.07.04 02:26) [11]
> 1) Чем Вам Oracle не угодил?!
Может я ошибаюсь, но Oracle требует неплохую машину для работы. А у меня клиентское приложение может работать на машинах типа P-II
← →
Fay © (2004-07-26 09:19) [13]1) Клиент может стоять на машине и попроще.
2) А какой объём данных предвидится?
← →
Sergey13 © (2004-07-26 09:39) [14]2saNat © (25.07.04 23:59) [10]
>У меня был выбор между Oracle и Paradox
Я тащусь. 8-) Ты не то выбрал! 8-)))))
А чем был обусловлен выбор? Наличием левых компактов, знаниями или еще чем?
← →
bushmen © (2004-07-26 09:41) [15]>У меня был выбор между Oracle и Paradox
Никаких других СУБД не знаешь? :)
← →
DenK_vrtz © (2004-07-26 09:45) [16]>Sergey13 © (26.07.04 09:39) [14]
>А чем был обусловлен выбор?
а на денюжке всего две стороны, не той стороной упала :)
← →
saNat © (2004-07-27 15:39) [17]А как связан Paradox и XP? [4][5]
← →
Sandman25 © (2004-07-27 15:40) [18][17] saNat © (27.07.04 15:39)
В данном контексте XP - это хранимые процедуры, а не Windows XP :)
← →
saNat © (2004-07-27 15:41) [19]Один из моих знакомых выдвинул версию - каждый раз при выполнении SQL.Open происходит загрузка и выгрузка драйвера и на это уходит время - та самая задержка. На сколько это верно и если это так, то как можно держать драйвер в памяти на время работы приложения?
← →
Sandman25 © (2004-07-27 15:45) [20][19] saNat © (27.07.04 15:41)
Это неверно.
← →
sniknik © (2004-07-27 16:18) [21]Sandman25 © (27.07.04 15:45) [20]
> [19] saNat © (27.07.04 15:41)
> Это неверно.
ну не всегда, в случае когда движок реализован как COM обьект, именно так и происходит, первый вызов. только не на SQL.Open а на конект.Open (и при условии что ктото гдето не работает с ним).
ADO это ком обьект.
> то как можно держать драйвер в памяти на время работы приложения?
в общем случае, без указания движка, говорить не о чем.
но даже в случае когда это так и есть главное не закрывать конект. (хотя даже закрытие еще не все, оно не выгружается сразу а только после какогото таймаута)
← →
Sergey13 © (2004-07-27 16:30) [22]2saNat ©
ИМХО, у тебя в голове каша приличная.
>"Драйверы в памяти"
>"Не хотелось использовать визуальные компоненты bd*, поэтому использую запросы SQL."
>У меня был выбор между Oracle и Paradox
Ты наверное про индексы только слышал и запросы пишешь только типа select * from Table. Будь попроще, спрашивай поконкретнее.
← →
saNat © (2004-07-28 19:24) [23]Попробовал я сделать базу в Access - скорости не прибавилось... Почему тормозит на SQL.Open?
← →
Fay © (2004-07-28 19:34) [24]Уважаемый автор! Вы ваще уже совсем офигели, что-ли?!
>> Почему тормозит на SQL.Open?
Да потому! Много здесь кто видел структуру базы и примеры запросов? Не очень. Вы бы ещё спросили - "А почему (желательно поподробней!) моя программа работает не совсем так, как я хочу?".
Всё уже сказано, и с Вашей стороны, видимо, ничего предпринято не было.
Творческих Вам успехов.
← →
bushmen © (2004-07-28 20:04) [25]> Творческих Вам успехов.
Которых, как я предвижу, в ближайшем будущем не предвидется.
← →
Fay © (2004-07-28 20:16) [26]2bushmen © (28.07.04 20:04) [25]
Может быть. Но вдруг, после завершения первого реального проекта, автор продолжит разработку нереальных? 8)
← →
bushmen © (2004-07-28 20:22) [27]> Fay © (28.07.04 20:16) [26]
Все может быть в этом мире бушующем :)
← →
sniknik © (2004-07-28 20:44) [28]> Почему тормозит на SQL.Open?
а почему бы ему не потормозить в удовольствие? ведь это вам надо чтобы было быстро а ему абсолютно пофигу, оно делает то что ты написал а не то что тебе хочется.
ответь на это и я отвечу на твой (с определенной степенью вероятности, придется ведь догадыватся).
← →
saNat © (2004-07-28 22:15) [29]to Fay уж у кого, а у Вас все исходники имеются и претензии по этому поводу мне непонятны [24]
P.S. С уважением...
← →
GanibalLector © (2004-07-29 00:49) [30]2 saNat
Уважаемый ,Вы бы успокоились и попробовали сделать так как я говорил.Замочить все StringGrid-ы и вместо них поставить DBGrid-ы.Дальше,замочить ТОТ класс и вообще забыть про классы...а использовать DataSourсe и связанные с ним гриды.
← →
saNat © (2004-07-29 07:34) [31]to GanibalLector ну да я сильно и не нервничаю [30] :-) а переделать, конечно, можно, но смысл терять время - ведь действия выполняемые мной с помощью методов ReadBD и WriteBD по сути аналогичны компонентам DBGrid и т.п. с той лишь разницей, что я хотел сделать их заточенными под выполнение конкретных действий в своем приложении. переделать не поленюсь.
С уважением...
← →
ЮЮ © (2004-07-29 07:53) [32]GanibalLector © (29.07.04 00:49) [30]
Вот только SQL.Open это никак не ускорит, если, конечно, заполненме StringGrida не стоит в обработчике SQL.OnAfterOpen.
>поставить DBGrid-ы.Дальше,замочить ТОТ класс и вообще забыть про классы...а использовать DataSourсe и связанные с ним гриды.
Я только через многие годы понял, насколько слаб DBGrid и стал разрабатывать и использовать собственные классы, а тут человек с первого реального проекта взялся за творчество!!!
>замочить ТОТ класс и вообще забыть про классы...
Вам пора в Президенты, молодой человек :-)
← →
ЮЮ © (2004-07-29 07:57) [33]автору
если вы по-прежнему стесняетесь опубликовать текст запроса и структуры используемых таблиц, шлите уж и сюда
Kolesov <ухо> msun <тчк> ru
← →
sniknik © (2004-07-29 08:09) [34]> ведь действия выполняемые мной с помощью методов ReadBD и WriteBD по сути аналогичны компонентам DBGrid и т.п.
наверняка нет (незнаю что ты там делаеш), но отличия скорее всего координальные.
1 ты перегоняеш весь рекордсет в стринггрид (предположение) а дбгрид работает с отображаемой областью only.
2 преобразований данных в строки (длительныя операция) в дбгриде не требуется (во всяком случае для всех записей, а только для того минимума что будет отображен)
3 скорее всего еще есть, но предположения уже достали.
SQL.Open также не ускорит безпочвенный треп здесь, можеш не заморачиваться, никто тебе не даст готового рещения без исходных данных и твоего активного участия, а этого ты похоже делать не собираешся. (еще одно предположение ;)
← →
saNat © (2004-07-29 13:28) [35]Угу... Ок, сегодня после работы выложу: метод чтения из БД и структуры таблиц - всё?
С уважением...
← →
Term (2004-07-29 14:37) [36]
> сегодня после работы выложу: метод чтения из БД и структуры
> таблиц
а что тянуть до конца рабочего дня, делов то пару кликов мышой
← →
Rule © (2004-07-29 15:56) [37]2Автор
Не обижайтесь на нападки моих коллег, просто не надо было использовать такие громкие слова как "я работаю над реальным проектои" и " у меня был выбор между такими СУБД", я бы посоветовал эти фразы поменять на такие : " вот только начал пробовать писать программы и мне показалось что лучше было бы использовать вот такие СУБД ... , подскажите пожалуйста, в чем я заблуждаюсь и где можна взять литературу"
со своей стороны я бы хотел вам посоветовать обратится за информацией на сайтик ibase.ru так как считаю что наиболее универсальной и простой является именно интербейз (фаерберд) и причем абсолютно бесплатная, на сайте достаточно информации, чтобы от азов дойти до профессионала ...
От дужи вам желаю творческой удачи и не сдавайтесь, скоро и вы будете смеятся над начинающими :)
← →
sniknik © (2004-07-29 22:20) [38]> скоро и вы будете смеятся над начинающими :)
смысл не в этом, и кстати редко кто над ними смеется, чаше досада на чела который обшатся не умеет. а ведет себя как партизан про свое сказать как можно меньше (уж если совсем припрут) но тем не менее выбить/выциганить/выпросить/... ответ на вопрос.
не понимая что ответ с вопросом взяимосвязаны.
а когда вопросы больще на развод похожи, естественно в ответ только насмешки.
← →
saNat © (2004-07-30 00:16) [39]Ну вот только добрался до Internet"а... Он у меня дома, а не на рабочем месте и обеденный перерыв лимитирован [36]
Ну по поводу "реального проекта" , то имелось ввиду приложение, которое должен работать, принося пользу и т.п., а не решение школьных задачек и экспериментов с чем-либо (что то же не плохо, но все же разные вещи). "Выбор между Paradox и Oracle" - ну так оно и было - с Paradox"ом начинал изучать БД, а Oracle "изучали" в университете... Больше ни чем ни пользовался. Был вариант с Access, но не знаю... склонился к первому. Спасибо Rule www.IBase.ru [37]. Будем знать.-------------
По поводу того, что нет кода - мне не всегда удается найти проблему, если она вырезана из общей массы и ты не знаешь как оно работает в целом... С другой стороны, понятно, что навязывать копаться в своих исходниках - не дело. Поэтому сразу было предложено скинуть исходники желающим... В любом случае исправляюсь.-------------
Идея состоит в передаче данных из филиалов в управление посредством e-mail. Данные представляют собой отчеты о деятельности за сутки. На данный момент все передается по телефону - лорого. Однако филиалы нужно оборудовать машинами, убедить начальство что проект выгоднее экономически и т.п. в конце-концов отладить саму программу. Поэтому на первом этапе предполагается ввод данных по телефону, но не в стандартные бумажные формы, а посредством приложения-сервера. Одновременно с этим решается задача резервирования - на случай если нет возможности доставки данных по эл. почте. Для решения вопроса со скоростью передачи я использую списки с данными - набирать текст гораздо дольше чем шелкать мышью по спискам. Сюда входят стандартные типы работ, список филиалов, персонал, а/м. Все эти данные разнесены по таблицам вида:
Филиалы
PhilialTable
------------
ID
Name
Address
PhoneCode
Персонал
PeopleTable
-----------
ID
FIO
Post
Автотранспорт
AutoTable
---------
ID
AutoType
AutoNumber
PhilialID
Таблица-связка для определения принодлежности персонала к филиалу
PhilialPeopleTable
------------------
PhilialID
PeopleID
← →
saNat © (2004-07-30 00:31) [40]На рабочей форме лежит компонент PageControl. Его вкладки разбиты по темам. Например, информация о филиале, аварийные заявки, опасные заявки...
Ну вот не лежит у меня душа со времен университета к компонентам DB* (Grid и подобные)... Мне показалось что будет лучше написать свой модуль для чтения/записи БД, работающий со "стандартными" компонентами
Получилось нечто следующее:
//Чтение данных
Procedure TBDModule.ReadBD(Component:TObject; FieldsList:String;TablesList:String;WheresList:String;WhereOn:Boolean);
Var
RowPosition:Integer;
ColPosition:Integer;
Begin
//Определение количества полей запроса
FieldsCount:=SetFieldsCount(FieldsList);
With MySQL Do
Begin
//Деактивация компонента
Close;
//Очистка текста запроса
SQL.Clear;
//Добавление текста запроса
SQL.Add("Select "+FieldsList+" From "+TablesList);
If WhereOn
Then SQL.Add("Where "+WheresList);
//Выполнение запроса
Open;
//Установка указателя на первую запись
First;
//Вывод данных в компонент типа "TListBox"
If Component.ClassName="TListBox"
Then
Begin
//Очистить
(Component As TListBox).Items.Clear;
//Пока не закончатся данные
While Not EOF Do
Begin
//Вывести значение
(Component As TListBox).Items.Add(FieldByName(SetFieldsByNumber(FieldsList,1)).AsString);
//Перейти к следующей записи
Next;
End;
End;
//Вывод данных в компонент типа "TCheckListBox"
If Component.ClassName="TCheckListBox"
Then
Begin
//Очистить
(Component As TCheckListBox).Items.Clear;
//Пока не закончатся данные
While Not EOF Do
Begin
//Вывести значение
(Component As TCheckListBox).Items.Add(FieldByName(SetFieldsByNumber(FieldsList,1)).AsString);
//Перейти к следующей записи
Next;
End;
End;
//Вывод данных в компонент типа "TEdit"
If Component.ClassName="TEdit"
Then
Begin
//Очистить
(Component As TEdit).Text:="";
//Вывести значение
(Component As TEdit).Text:=FieldByName(SetFieldsByNumber(FieldsList,1)).AsString;
End;
//Вывод данных в компонент типа "TLabel"
If Component.ClassName="TLabel"
Then
Begin
//Очистить
(Component As TLabel).Caption:="";
//Пока не закончатся данные
While Not EOF Do
Begin
//Вывести значение
(Component As TLabel).Caption:=(Component As TLabel).Caption+FieldByName(SetFieldsByNumber(FieldsList,1)).AsString+", ";
//Перейти к следующей записи
Next;
End;
(Component As TLabel).Caption:=Copy((Component As TLabel).Caption,1,Length((Component As TLabel).Caption)-2);
End;
//Вывод данных в компонент типа "TIDField"
If Component.ClassName="TIDField"
Then
Begin
//Очистить
(Component As TIDField).Code:="";
//Вывести значение
(Component As TIDField).Code:=FieldByName(SetFieldsByNumber(FieldsList,1)).AsString;
End;
//Вывод данных в компонент типа "TStringGrid"
If Component.ClassName="TStringGrid"
Then
Begin
(Component As TStringGrid).RowCount:=2;
ColPosition:=0;
While ColPosition<=((Component As TStringGrid).ColCount-1) Do
Begin
(Component As TStringGrid).Cells[ColPosition,1]:="";
Inc(ColPosition);
End;
RowPosition:=1;
While Not EOF Do
Begin
ColPosition:=0;
While ColPosition<=((Component As TStringGrid).ColCount-1) Do
Begin
(Component As TStringGrid).Cells[ColPosition,RowPosition]:=FieldByName(SetFieldsByNumber(FieldsList,ColPosition+1)).AsString;
Inc(ColPosition);
End;
Next;
If Not EOF
Then
Begin
(Component As TStringGrid).RowCount:=(Component As TStringGrid).RowCount+1;
Inc(RowPosition);
End;
End;
End;
If Component.ClassName="TComboBox"
Then
Begin
(Component As TComboBox).Items.Clear;
While Not EOF Do
Begin
(Component As TComboBox).Items.Add(FieldByName(SetFieldsByNumber(FieldsList,1)).AsString);
Next;
End;
End;
End;
End;
Внутрь я передаю объект, в который собираюсь выводить данные, список полей, список таблиц и список условий отбора (если требуется - последний параметр). Т.К. с TStrings я до конца не разобрался (пока), то параметры передаются строкой и пришлось сделать метод для поиска метода по его порядку в списке... После самого запроса следует реализация вывода в различные "объекты-приемники."
← →
saNat © (2004-07-30 00:45) [41]Итак, сначала выбирпаем филиал.По вызову формируется запросом список наименований. После выбора идентификатор запоминаем в переменную типа
TIDField=Class(TObject)
Code:String;
End;
Здесь пришлось следовать идее - в метод передаем объект. Писать отдельный метод для получения идентификатора не хотелось (хотя...)
Дальше посылаем запрос на вывод данных о филиале в Label"ы.
Вышеописанное выглядит так:
//Вывести окно
PhilialSelect.ShowModal;
//Если выбран филиал...
If PhilialSelect.PhilialName<>"None"
Then //...то
Begin
//Вывести значение в соответствующее окно
PhilialName.Text:=PhilialSelect.PhilialName;
//Вывести адрес филиала
BDModule.ReadBD(AddressValue,
"Address",
"PhilialTable",
"ID=""+ThisID+""",True);
//Если значений нет...
If AddressValue.Caption=""
Then //...вывести подпись
AddressValue.Caption:="отсутствует";
//Вывести кода телефон АДС
BDModule.ReadBD(ADSPhoneValue,
"PhoneCode",
"PhilialTable",
"ID=""+ThisID+""",True);
//Если значений нет...
If ADSPhoneValue.Caption=""
Then //...вывести подпись
ADSPhoneValue.Caption:="отсутствует";
//Запись кода во вспомогательную переменную
BufString:="("+ADSPhoneValue.Caption+") ";
//Вывести телефоны АДС
BDModule.ReadBD(ADSPhoneValue,
"Number",
"PhoneTable,PhilialPhoneTable",
"(PhilialPhoneTable.PhilialID=""+ThisID+"")And"+
"(PhilialPhoneTable.PhoneID=PhoneTable.ID)And"+
"(PhoneTable.Type="1")",True);
//Если значений нет...
If ADSPhoneValue.Caption=""
Then //...вывести подпись
ADSPhoneValue.Caption:="отсутствует";
ADSPhoneValue.Caption:=BufString+ADSPhoneValue.Caption;
//Вывести сотовый АДС
BDModule.ReadBD(ADSMobileValue,
"Number",
"PhoneTable,PhilialPhoneTable",
"(PhilialPhoneTable.PhilialID=""+ThisID+"")And"+
"(PhilialPhoneTable.PhoneID=PhoneTable.ID)And"+
"(PhoneTable.Type="4")",True);
//Если значений нет...
If ADSMobileValue.Caption=""
Then //...вывести подпись
ADSMobileValue.Caption:="отсутствует";
//Вывести факс
BDModule.ReadBD(FaxValue,
"Number",
"PhoneTable,PhilialPhoneTable",
"(PhilialPhoneTable.PhilialID=""+ThisID+"")And"+
"(PhilialPhoneTable.PhoneID=PhoneTable.ID)And"+
"(PhoneTable.Type="3")",True);
//Если значений нет...
If FaxValue.Caption=""
Then //...вывести подпись
FaxValue.Caption:="отсутствует";
//Вывести адрес электронной почты
BDModule.ReadBD(ADSEMailValue,
"EMail",
"PhilialTable",
"ID=""+ThisID+""",True);
//Если значений нет...
If ADSEMailValue.Caption=""
Then //...вывести подпись
ADSEMailValue.Caption:="отсутствует";
//Обновление списка поступивших заявок
RefreshWarningPage;
RefreshOutPage;
RefreshClearPage;
End;
End;
//Нужно удалить принудительный вывод "отсутствует" - в БД автоматом ставится значение по умолчанию - сам знаю :-)
Предположим поступает заявка. В новом окне выводится список персонала, список авто и список номеров авто (по этому поводу пока сам думаю - есть идея отделить типы автомобилей от их номеров - для уменьшения избыточности, с другой стороны во всем надо знать меру - тогда можно одним списком выводить и машиу и номер. пока думаю). Так же выводится список стандартных работ по данной заявке. Получаем такой фрагмент:
BDModule.ReadBD(NewWarning.ADSPeopleList,
"FIO",
"PeopleTable,PhilialPeopleTable",
"(PhilialID=""+ThisID+"")And"+
"(PeopleID=ID)",True);
BDModule.ReadBD(NewWarning.ADSAutoTypeList,
"AutoType",
"AutoTable",
"PhilialID=""+ThisID+""",True);
BDModule.ReadBD(NewWarning.ADSAutoNumberList,
"AutoNumber",
"AutoTable",
"PhilialID=""+ThisID+""",True);
Эти списки приходится заполнять перед или во время активации формы, т.к. они разные для каждого филиала.
← →
saNat © (2004-07-30 00:49) [42]При отладке возникает самая большая пауза во время выполнения SQL.Open. При выполнении нескольких запросов эта задержка ощутима. Особенно, если учесть, что под диктовку нужно вводить несколько заявок. Вроде бы количество запросов не большое (максимум 5) и количество выбираемых данных мало - до 1000 записей на будущее.
По-моему по сути вопроса это все. Хотя может и упустил чего. Желающим могу скинуть исходники... Спасибо всем откликнувшимся.
С уважением...
← →
sniknik © (2004-07-30 08:42) [43]упустил, компаненты доступа, используемый драйвер(движок), связь между компанентами (или отсутствие таковой)...
насчет показаного, как и думал... хреново. стандартные db компаненты более интелектуальны...
передаются все строки независимо от того нужны ли они для отображения, преобразование в строку, используется поиск имени (fieldbyname) в цикле, и для заполнения разных компанент используется переоткрытие и сканирование одной и той же таблицы только потому что поля заполнения разные.
все это очень нехорощо.
теперь к SQL.Open, говориш задержка? а сколько? секунда, две, минута?
если компаненты работают/настроены по серверной технологии то перекачка данных обязательно займет какоето время... вопрос, оправданое ли, или действительно тормозят, а этого у тебя не понятно.
вот я делаю запрос простой к таблице в ней 25 полей все числовые, записей 2076. отрабатывает (open) за 0,1сек. это как для тебя задержка?
← →
Sergey13 © (2004-07-30 09:27) [44]2saNat © (30.07.04 00:16)
>Поэтому на первом этапе предполагается ввод данных по телефону, но не в стандартные бумажные формы, а посредством приложения-сервера.
Не делай этого!!! Тебя проклянут и загубят этим может быть неплохую идею.
>Ну вот не лежит у меня душа со времен университета к компонентам DB* (Grid и подобные)... Мне показалось что будет лучше написать свой модуль для чтения/записи БД, работающий со "стандартными" компонентами
Прикинь - приходит парень, ездивший до этого на велосипеде как любитель, в авторем мастерскую и говорит - "ну не лежит у меня душа к карбюратору, мне кажется...".
← →
Rule © (2004-07-30 09:42) [45]//Прикинь - приходит парень, ездивший до этого на
//велосипеде как любитель, в авторем мастерскую и говорит -
//"ну не лежит у меня душа к карбюратору, мне кажется...".
Вот это мне понравилось, в предыдущем посте, вот атк оно и есть, не придумывай велосипед, ради бога, если тыхочешь использовать парадокс и стандартные компоненты, то возьми ты этот BDE да и напиши программку, только напиши правильно, разберись как это сделать, иначе тебе же потом хуже будет, прийдется все переписывать а перед этим ещё помучатся нехило,
вот тебе ссылки от АП
http://podgoretsky.com/cgi-bin/dlcounter/npscnt?file=http://podgoretsky.com/ftp/Docs/Delphi/Kuzmenko/bde.htm&file_id=Kuz menkoBDE
http://podgoretsky.com/cgi-bin/dlcounter/npscnt?file=http://podgoretsky.com/ftp/Docs/Delphi/D7/d7stb/index.html&file_id= d7stb
я думаю достаточно пока, если чего покапаешься у подгоретского или в гугле, там достаточно всего
← →
Term (2004-07-30 09:59) [46]мдя задача тривиальная, а наворотил то ... и главный вопрос ЗАЧЕМ???
я этими компонентами DBGrid пользуюсь всю жизнь и не разу никаких проблем не было.
Зачем тратить время на то что и так сделано давно и намного лучше, или ты думаеш в Боорланде народ глупее тебя сидит :)))
В общем брось эту дурь со стринггридом, его надо использовать там где надо, а не в извращениях.
И самое что меня заинтересовало чем тебе DBGrid не угодил, уж просвети чтобы все знали, а то ничего конкретного ты не сказал
← →
Rule © (2004-07-30 10:29) [47]Да кстати по поводу гридов, советую разобраться в EhLib"e, вот если разберешся я тебе гарантирую что 90 процентов тебе больше ничего не захочется а если захочется, то просто допишешь до этой библиотеки чего захочется и вернешь разработчикам что и другие воспользовались тем что тебе захотелось, вот так
← →
Term (2004-07-30 11:52) [48]
> советую разобраться в EhLib"e,
это точно, там есть много такого что тебя обрадует :)))
← →
dtm (2004-07-30 15:12) [49][40] - [41]
Божачка ;)... I робяць жа людзi дарэмныя рэчы ... =)
[47] Rule
А если захочется, то пусть посмотрит DevExpress Quantum Grid Suite. После этого точно не захочется ;)
← →
Slym © (2004-07-30 16:39) [50]Парень.. ты про BeginUpdate/EndUpdate слышал?...
и о DisableControls/EnableControls...
И еще часто ганяясь за одним критерием приходится жертвовать другим...
← →
Term (2004-07-30 17:09) [51]
> Парень.. ты про BeginUpdate/EndUpdate слышал?...
> и о DisableControls/EnableControls...
это ты автору??? то явно не к месту :)))
Страницы: 1 2 вся ветка
Форум: "Базы";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];
Память: 0.64 MB
Время: 0.065 c