Блог по программированию в среде Delphi

Поиск по блогу

Есть идея по созданию интересной программы?

Опиши тут и я по возможности постараюсь это реализовать специально для тебя! Без $ ))

пятница, 26 марта 2010 г.

DataSet1 компонент для работы с базой данных

Open – открытие набора данных
Close – закрытие набора данных
Prior – предыдущая запись
First – первая запись
Last – последняя запись
Next – следующая запись
MoveBy – для перемещения по записям
RecNo – Номер текущей записи (можно присваивать и получать)
RecSize – Размер в байтах текущей записи
DisableControls – отключение отображения данных в органах формы
EnableControls – включение отображения данных в органах формы
RecordCount – получение количества записей в таблице
CanModify – проверка возможности изменения данных (True- можно False- нельзя)
Edit – переводим набор в режим редактирования
Insert – добавление записи по месту положения курсора (не мыши) в наборе данных
Append – добавление записи в конец набора данных
Delete – выбранная запись удаляется
ClearFields – очистка всех полей выбранной записи
Locate – поиск информации по базе данных если запись найдена, то она становится текущей (в случае удачного поиска возвращается True, неудачного – False)
Lookup – находит запись точно удовлетворяющую условиям поиска, но не делает ее текущей
function Lookup(const KeyFields:string; const KeyValues:Variant; const ResultFields:string)
KeyFields – список полей по которым производится поиск
KeyValues – ключевые значения по которым производится поиск ( VarArrayOf( [ ]) )
ResultFields – поля которые будут возвращены в вариантном массиве, если поиск окажется успешным в противном случае возвращает Null
Filtered – критерий для фильтрации данных
State – текущее состояние набора данных
FieldByName – обращение к полю по его названию
Fields[i] – обращение к полю по индексу
Типы полей 
fkData – поле имеет тип как в базе
fkCalculated – вычисляемые поля
fkLookup – поле синхронного просмотра
fkInternalCalc – внутреннее вычисляемое поле
fkAggregate – агрегатное поле

понедельник, 22 марта 2010 г.

Список SQL запросов

Вывод нужных полей

SELECT LastName, FirstName, Salary FROM employee

[Хотим вывести только имя, фамилию и оклад служащих]


Вывод всех полей из таблицы

SELECT * FROM employee

[ * обозначает все поля]


Задание псевдонима таблице

SELECT * FROM employee emp

where emp.salary>35000

[Таблице employee в качестве псевдонима задано emp

Выводим всех служащих с окладом свыше 35000]


Исключение дубликатов

SELECT DISTINCT Country FROM vendors

[Хотим узнать из каких стран поставляют продукцию]


Постановка условия

SELECT * FROM vendors

Where Country='Canada'

[Выводим поставщиков из Канады]


Использование логические операторов

SELECT * FROM vendors

Where Country='U.S.A.' and Preferred='True'

[Выводим только предпочитаемых поставщиков из США.

Когда используем оператор AND должны удовлетворяться оба условия]



SELECT * FROM animals

Where AREA='South America' or AREA='New Orleans'

[Хотим видеть только тех животных, которые обитают в Южной Америке или Новом Орлеане

Когда используем оператор OR должно удовлетворяться хотя бы одно условие]



SELECT * FROM animals
Where AREA='South America' and not Weight<7 [Выводим животных, обитающих в Южной Америке с весом не менее 7 кг Когда используем оператор AND NOT должно удовлетворяться первое условие и не должно - второе] SELECT * FROM animals Where Weight<5 or not Weight<10 [Выводим животных, с весом менее 5 кг или более 10 кг Когда используем оператор OR NOT должно либо удовлетворяться первое условие, либо не должно - второе] Упорядочивание записей по возрастанию/убыванию/по номеру столбца SELECT * FROM animals order by Weight [Выводим животных в порядке увеличения веса: сначала самые лёгкие, в конце самые тяжелые] SELECT * FROM animals order by Weight desc [...наоборот - по убыванию] SELECT * FROM animals order by 3 [Упорядочить по третьему столбцу (отсчёт начинается с 1 )] Объединение нескольких запросов SELECT * FROM animals Where Area='South America' UNION SELECT * FROM animals Where Area='New Orleans' [Выводим тех животных, которые обитают в Южной Америке, а так же тех, которые обитают в Новом Орлеане Оператором UNION можем объединять несколько запросов] Максимальное/минимальное значение поля SELECT MAX(Salary) FROM employee [Выводим максимальный оклад из таблицы служащих] SELECT MIN(Salary) FROM employee [Выводим минимальный оклад из таблицы служащих] Сумма всех значений/среднее значение SELECT SUM(Salary) FROM employee [Так можем узнать сколько получают служащие некой фирмы вместе взятые] SELECT AVG(Salary) FROM employee [Так можем узнать среднестатистический оклад] Количество записей в таблице/в поле SELECT COUNT(*) FROM employee [Находим количество записей в таблице - в данном случае количество служащих] SELECT COUNT(*) FROM clients Where occupation='Programmer' [Посчитали сколько человек увлекаются программированием] Группировка записей SELECT Continent, MAX(Area) FROM country group by Continent [С помощью конструкции "group by" можем узнать какая страна занимает самую большую площадь для каждого континента] Конструкция IN select * from Customer Where Country IN ('US','Canada','Columbia') [Выводим покупателей из США, Канады и Колумбии] select * from Customer Where Country NOT IN ('US','Canada') [Выводим всех покупателей за исключением тех, кто проживает в США, Канаде] Вывод пустых/непустых значений select * from Customer Where State is NULL [Выводит те записи, где не введено значение в поле State] select * from Customer Where State is NOT NULL [Выводит те записи, где введено значение в поле State] Вывод значений приблизительно соответствующих нужным select * from employee Where LastName like 'L%' [Выводим только тех служащих, у которых фамилия начинается на букву 'L'. Знак '%' - означает любые символы] select * from employee Where LastName like 'Nels_n' [Например, мы не помним: как правильно пишется 'Nelson' или 'Nelsan', тогда нужно будет воспользоваться знаком подчёркивания, который означает любой символ] Диапазон значений select * from employee Where Salary BETWEEN 25000 AND 50000 [Можем вывести только тех, кто получает от 25000 до 50000 включительно] ANY, SOME, ALL SELECT * FROM orders.db where custno= ANY (select custno from customer.db where city = 'Largo'); или SELECT * FROM orders.db where custno= SOME (select custno from customer.db where city = 'Largo'); или SELECT * FROM orders.db where custno IN (select custno from customer.db where city = 'Largo'); [Выводим заказы покупателей из города 'Largo'] SELECT * FROM clients where birth_date>All(select birth_date from clients where city='Los Altos')

[Вывести тех клиентов, которые моложе всех из 'Los Altos']

EXISTS

SELECT * FROM orders.db
where custno= ANY (select custno from customer where city = 'Largo')
and Exists(SELECT * FROM customer WHERE City='Largo')

[Выводим заказы покупателей из города 'Largo' если вообще есть покупатели с этого города]

Использование параметров

SELECT * FROM clients
where Last_Name=:LastNameParam

[Если мы хотим дать возможность пользователю самому указывать фамилию нужного ему клиента. мы вместо значения для поля фамилия указываем параметр. Параметры указываются после двоеточия. И получить доступ к ним можно по индексу из свойства Params компонента Query. Индексация начинается с нуля. Затем, например, по нажатию на кнопке напишем код:

Query1.Active:=false;
Query1.Params[0].AsString:=Edit1.Text;
Query1.Active:=true;
]

Вывод дополнительного текста[использование выражений]

SELECT LastName, Salary/100, '$' FROM employee

[Если зарплата указана не в долларах, а какой-то другой валюте, курс которой равен 1 к 100, мы можем вывести данные в $, используя вышеуказанное выражение]

Использование нескольких таблиц

SELECT o.orderno,o.AmountPaid, c.Company FROM orders o, customer c
where o.custno=c.custno and c.city='Largo'

[Выводим номер и сумму заказа из таблицы заказов и компанию сделавшую заказ из таблицы покупателей]

Вложенные подзапросы

SELECT * FROM employee
where Salary=(select MAX(Salary) from employee)

[Мы научились выводить максимальное значение, например, можем узнать максимальный оклад у служащих, но куда полезнее было бы узнать кто тот счастливчик. Именно здесь используется механизм вложенных подзапросов]

вторник, 16 марта 2010 г.

Жизнь формы

(Перевод одноимённой статьи с сайта delphi.about.com)
В Windows основной элемент пользовательского интерфейса - форма. В Delphi каждый проект имеет по крайней мере одно окно - главное окно приложения. Все окна в Delphi основаны на объекте TForm. В данной статье мы рассмотрим основные события учавствующие в "жизни формы".
Форма
Формы имеют свои свойства, события и методы, при помощи которых Вы можете управлять видом и поведением формы. Форма, это обычный компонент Delphi, но в отличие от других, её нет на панели компонентов. Обычно форма создаётся при создании нового проекта (File | New Application). Вновь созданная форма будет главной формой приложения.

Дополнительные формы в проекте создаются через File | New Form. Так же существуют и другие способы создания форм, но здесь мы не будем рассматривать их...

Как и любой другой компонент (объект) форма имеет свои методы и реагирует на события. Давайте рассмотрим некоторые из этих событий...

Рождение

OnCreate -> OnShow -> OnActivate -> OnPaint -> OnResize -> OnPaint ...

OnCreate

Событие OnCreate возникает при создании TForm и только один раз. При создании формы (у каторой свойство Visible установлено в True), события произойдут в следующем порядке: OnCreate, OnShow, OnActivate, OnPaint. В обработчике события OnCreate можно сделать какие-либо инициализационные действия, однако, любые объекты созданные в OnCreate будут уничтожены в событии OnDestroy.

OnShow
Это событие генерируется, когда форма станет видимой. OnShow вызывается сразу перед тем, как форма станет видимой. Это событие случается, если установить свойство формы Visible в True, либо при вызове методов Show или ShowModal.

OnActivate
Это событие генерируется, когда форма становится активной, тоесть когда форма получает фокус ввода. Это событие можно использовать для того, чтобы сменить элемент формы который должен получить фокус.
OnPaint, OnResize Эти события вызываются каждый раз, когда форма изначально создаётся. При этом OnPaint вызывается каждый раз, когда какому-нибудь элементу формы необходимо перерисоваться (это событие можно использовать, если необходимо при этом рисовать на форме что-то особенное).

Жизнь
Когда форма создана и все её элементы ждут своих событий, чтобы обрабатывать их, жизнь формы продолжается до тех пор, пока кто-нибудь не нажмёт крестик в верхнем правом углу формы!

Уничтожение
При уничтожении формы, события генерируются в следующем порядке:


... OnCloseQuery -> OnClose -> OnDeactivate -> OnHide -> OnDestroy

OnCloseQuery
Если мы попытаемся закрыть форму при помощи метода Close либо другим доступным способом (Alt+F4 либо через системное меню), то сгенерируется событие OnCloseQuery. Таким образом, это событие можно использовать, чтобы предотвратить закрытие формы. Обычно, событие OnCloseQuery используется для того, чтобы спросить пользователя - уверен ли он (возможно в приложении остались несохранённые данные).

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
    if MessageDlg('Really close this window?', mtConfirmation,[mbOk, mbCancel], 0) = mrCancel then
    CanClose := False;
end;

Обработчик события OnCloseQuery содержит переменную CanClose, которая определяет, можно ли форме закрыться. Изначальное значение этой переменной True. Однако в обработчике OnCloseQuery можно установить возвращаемое значение CloseQuery в False, чтобы прервать выполнение метода Close.

OnClose
Если OnCloseQuery вернул CanClose=True (что указывает на то, что форма должна быть закрыта), то будет будет сгенерировано событие OnClose. Событие OnClose даёт последний шанс, чтобы предотвратить закрытие формы. Обработчик OnClose имеет параметр Action со следующими четырьмя возможными значениями: caNone. Форме не разрешено закрыться. Всё равно, что мы установим CanClose в False в OnCloseQuery. caHide. Вместо закрытия, форма будет скрыта. caFree. Форма будет закрыта, и занятые ей ресурсы будут освобождены. caMinimize. Вместо закрытия, форма будет минимизирована. Это значение устанавливается поумолчанию у дочерних форм MDI.
Замечание: Когда пользователь шутдаунит Windows, то будет вызвано OnCloseQuery, а не OnClose. Если Вы не хотите, чтобы Windows завершила свою работу, то поместите свой код в обработчик события OnCloseQuery, хотя CanClose=False не сделает, того, что сделано здесь.

OnDestroy
После того, как метод OnClose будет обработан и форма будет закрыта, то будет вызвано событие OnDestroy. В OnCreate обычно делаются действия, противоположные тем, которые проделывались в OnCreate, то есть уничтожение созданных объектов и освобождение выделенной памяти.
Естевственно, что когда главная форма проекта будет закрыто, то приложение будет завершено.

пятница, 12 марта 2010 г.

Получить весь HTML из TWebBrowser

Нашел на просторах интернета функцию с использованием DOM которая позволяет получить исходный текст страницы из  WebBrowser'а не используя особых ухищрений


//получить весь html
function THTMLEditor.html_GetFullHTML:string;
var
  wbEll : IHTMLElement;
begin
   Result:='';
   if Assigned(WebBrowser1.Document) then
   begin
     wbEll := (WebBrowser1.Document AS IHTMLDocument2).body;
     while wbEll.parentElement <> nil do
     begin
       wbEll := wbEll.parentElement;
     end;
     Result := wbEll.outerHTML;
   end;
end;

функция рабочая только необходимо добавить в uses ...... MSHTML;

Моя первая запись.

Вообще идея блога возникла по причине того, что постоянно перелопачивается большое кол-во информации связанной с программированием. Естественно всего не запомнить так, что для хранения разного рода документации, я выбрал блог. Дешево и сердито )))
Если буду очень нужен)) можете найти меня на сайте  http://kvrsoft.com/  сайт посвящен программированию в среде Delphi 7.
Так же людям использующим торговые сигналы e-mini советую сайт своего друга http://scalan.net (trading e-mini futures S&P 500 signals)

Пишу в блоге не для кого либо, а для себя, если кого то, что то не устраивает пишите.
Описания моих прог
http://habrahabr.ru/blogs/ui/107627/