Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

СообЧА. Программирование на Delphi


Служба Рассылок Subscribe.Ru
Subscribe.Ru :СообЧа программирование на дельфи !
—Сообча : программирование на дельфи

Почтовая рассылка "Модные обои для Вашего рабочего стола"
Ежедневная рассылка самых стильных фоновых рисунков и фотографий для Вашего рабочего стола. Избранные обои из личной коллекции создателя популярной библиотеки полноэкранной графики "Wallpapers.ru"
Подписавшись на рассылку, Вы будете ежедневно получать письмо с уменьшенными копиями фоновых изображений (200x150 pix) + ссылки на оригинальные картинки (например, 1024x768 pix). Все графические материалы располагаются на сервере "Wallpapers.ru", поэтому у Вас не возникнет никаких затруднений при скачивании файлов.
Надо бы подписаться!  PIXEL  рекомендует!!! Загляните в архив рассылки!

СооБча : Коллекционный выпуск Design:Pixel
 В этом выпуске:

Обратите внимание на размер нашей рассылки :)(с) Optimist

 

Рассылки Subscribe.Ru это стильно удобно, и информативно!
СообЧа (СООБщество ЧАйников). Обмен опытом, вопросы, ответы.
подпишись и подпиши друга!!!!

 Contact (Связь с Нами):

Pixel@novgorod.net + Subject:

Vcl Haunting

"Золотой Чайник"

Вопрос по дельфи N (номер версии)

Help!

 

 

Новости (Слово о нашем спонсоре...)

К заголовку

Господа подписчики, близятся новогодние праздники, время начать думать о подарках (я знаю что еще октябрь месяц и не сошел с ума), а лучший подарок это книга... Приглашаю вас всех посетить интернет-магазин "ОЗОН", в нем вы найдете книги на любой вкус! Помимо разношерстных изданий по дельфи и языкам программирования вы найдете детскую , зарубежную и прочую литературу, а также множество учебников и учебных пособий на любой вкус...   

Если же вы не любите книги, то к вашему вниманию:

  • Лицензионные видеокассеты
  • Лучший ЛИЦЕНЗИОННЫЙ Софт и ПОПУЛЯРНЫЕ ИГРЫ  (большинство дисков идут в комплектации "Jewel Box", а это до 100р без учета доставки! )

Доставка В ЛЮБОЙ ГОРОД РОССИИ + оплата по получению. Возможна оплата по кредитной карты через интернет, если ВЫ ОЧЕНЬ ЦЕНИТЕ ВРЕМЯ то заказ доставят курьерской почтой!

Ура товарищи! Новый год не за горами !!!!

ВНИМАНИЕ , ЕСТЬ ЛИТЕРАТУРА ПО ДЕЛЬФИ 6, ЕЕ ЛЕГКО НАЙТИ ЧЕРЕЗ ПОИСКОВУЮ СИСТЕММУ НАБРАВ "DELPHI 6" . Рекоммендую также WindowsXP , кульная вещь! (особенно лицензия)

 

О проблемах....

К заголовку

Потеря FrontPage не согнула наш журнал(прошу прощения за выходку с вордом), теперь я использую Macromedia DreamWaver. Так что ТАКИХ БОЛЬШИХ размеров файла больше не будет.

 

Поиск в БД

К заголовку

Я представляю на Ваш суд утилиту быстрого поиска по базе данных. Данная технология производит поиск по полям, преобразуя их значения в строки (все значения преобразуются в верхний регистр, включая действительные числа). Данное решение может быть не самым быстрым, однако на поверку оно оказывается быстрее остальных, обнаруженных мною в Интернете (может вам повезет больше). Более того, представьте, что действительное значение какого-либо поля равно 4.509375354, а значение поиска равно 7, в этом случае утилита засчитает "попадание". Утилита удобна также тем, что она за один проход производит поиск более, чем в одном поле. Это удобно, если у Вас имеются, к примеру, два поля с адресами. Это моя первая "серьезная" разработка, так как первое, с чем я столкнулся, изучая Delphi, стала необходимость включения процедуры поиска в любое приложение, работающее с базой данных. А так как поиск - вещь тоже сугубо специфическая, как и любое приложение, то мне пришлось побороть свой страх перед "БД" и попробовать написать свой поисковый механизм, удовлетворивший меня (и, надеюсь, других) своей скоростью и возможностью "мульти"-поиска по нескольким полям. Я надеюсь, что он поможет тем программистам, кто часто сталкивается с подобными задачами. Технология довольно легка для понимания, но если у Вас возникли какие-либо вопросы, пошлите мне письмо электронной почтой, я буду рад Вам помочь. Посмотрев код, можно легко узнать поддерживаемые типы полей (добавить новые не составит проблем). Если кто-либо обнаружит ошибочный код пожалуйста, пошлите это мне, я буду весьма благодарен. Спасибо.

Unit Finder;

interface

uses DB, DBTables, SysUtils;

function GrabMemoFieldAsPChar(TheField : TMemoField): PChar;
function DoFindIn(TheField : TField; SFor : String): Boolean;
function FindIt(TheTable : TDataSet; TheFields : array of integer;

SearchBackward : Boolean; FromBeginning : Boolean; SFor : String): Boolean;
{применение функции FindIt -

if FindIt(NotesSearchT,
[NotesSearchT.FieldByName('Leadman').Index],
False, True, SearchText.Text) then DoSomething; }

implementation

function GrabMemoFieldAsPChar(TheField : TMemoField): PChar;
begin
with TBlobStream.Create(TheField, bmRead) do

begin
GetMem(Result, Size + 1);
FillChar(Result^, Size + 1, #0);
Read(Result^, Size);
Free;
end;
end;

function DoFindIn(TheField : TField; SFor : String): Boolean;
var

PChForMemo : PChar;
begin
Result := False;
case TheField.DataType of

ftString :
begin
if (Pos(SFor, UpperCase(TheField.AsString)) > 0) then
Result := True;
end;
ftInteger :
begin
if (Pos(SFor, TheField.AsString) > 0) then Result := True;
end;
ftBoolean :
begin
if SFor = UpperCase(TheField.AsString) then
Result := True;
end;
ftFloat :
begin
if (Pos(SFor, TheField.AsString) > 0) then Result := True;
end;
ftCurrency :
begin
if (Pos(SFor, TheField.AsString) > 0) then Result := True;
end;
ftDate .. ftDateTime :
begin
if (Pos(SFor, TheField.AsString) > 0) then Result := True;
end;
ftMemo :
begin
SFor[Ord(SFor[0]) + 1] := #0;
PChForMemo := GrabMemoFieldAsPChar(TMemoField(TheField));
StrUpper(PChForMemo);
if not (StrPos( PChForMemo, @SFor[1] ) = nil) then Result :=
True; FreeMem(PChForMemo, StrLen(PChForMemo + 1));
end;
end;
end;

function FindIt(TheTable : TDataSet; TheFields : array of integer;

SearchBackward : Boolean; FromBeginning : Boolean; SFor : String): Boolean;
var

i, HighTheFields, LowTheFields : integer;
BM : TBookmark;
begin
TheTable.DisableControls;
BM := TheTable.GetBookmark;
try
LowTheFields := Low(TheFields);
HighTheFields := High(TheFields);
SFor := UpperCase(SFor);
Result := False;
if FromBeginning then TheTable.First;
if SearchBackward then

begin
TheTable.Prior;
while not TheTable.BOF do
begin
for i := LowTheFields to HighTheFields do
begin
if DoFindIn(TheTable.Fields[TheFields[i]], SFor) then
begin
Result := True;
Break;
end;
end;
if Result then Break else TheTable.Prior;
end;
end else
begin
TheTable.Next;
while not TheTable.EOF do
begin
for i := LowTheFields to HighTheFields do
begin
if DoFindIn(TheTable.Fields[TheFields[i]], SFor) then
begin
Result := True;
Break;
end;
end;
if Result then Break else TheTable.Next;
end;
end;
finally
TheTable.EnableControls;
if not Result then

TheTable.GotoBookmark(BM);
TheTable.FreeBookmark(BM);
end;

end;

end.

 

 

 

 

Снова БД

К заголовку

  • Вставка новой записи через буфер


Table2.Insert;
Move(Table1.ActiveBuffer^,Table2.ActiveBuffer^,Table1.RecordSize);
Table2.FieldByName('Primary Key').AsWhatever := whatever; {При необходимости назначаем новый первичный ключ}
Table2.Post

...если вы уверены в том, что нарушение ключа произойти не может, то можно вырезать это для дальнейшего использования:


DbiInsertRecord(Table2.Handle,dbiNOLOCK,Table1.ActiveBuffer);

...конечно, это "обходит" VCL, т.к., чтобы увидеть потом новую запись, необходимо сделать TTable.Refresh.


 

 

Экстра новости

К заголовку

К нововому году все сообчайники получат подарок, а именно коллекционный выпуск своего любимого журнала в PDF формате, с лучшими советами и исходными кодами, а также адресами на халявные TOP-VCL.

 

До встречи...

Zaluskiy Anton(COOLer)  и Khrapunov Kirill(Pixel)  - ведущие проекта    "Мир Delphi" Copyright : Pixelsoftware(Pixel)& Delphi 2000(COOLer)


к3кй TopList SpyLOG

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу
Рейтингуется SpyLog

В избранное