Рейтинговые книги
Читем онлайн Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 33 34 35 36 37 38 39 40 41 ... 123

end;

function CheckExistence(SQLscript: TSQLscript): boolean;

begin

 with GiveMeResultSET(SQLscript) do begin

  Result := NOT EOF;

  Free;

 end;

end;

function GiveMeResultSET(SQLscript: TSQLscript): TQuery;

begin

 Result := CreateTempQuery(SQLscript);

 with Result do try

  Open;

 except

  Free;

  Result:= NIL;

 end;

end;

function FastLookUP(SQLscript: TSQLscript): string;

begin

 with GiveMeResultSET(SQLscript) do begin

  try

   Result:= Fields[0].AsString;

  except

   Result:= '';

  end;

  Free;

 end;

end;

end

Поиск записи в SQL DataSet

Delphi 1 

В случае изменения содержимого полей редактирования сделайте следующее: 

Query1.Close;

Query1.SQL.Clear;

Query1.SQL.Add('SELECT * FROM <таблица> WHERE <поле> LIKE ''' + SpeedEdit.Text + '*''');

Query1.Open;

Будут возвращены все записи, указанные в поле редактирования. 

При попытке выполнения такого оператора SQL – 'DELETE from T39 T39C0 WHERE T39C0.F1LHT35=253291661' SQL-сервер ругается на недопустимый синтаксис. В чем я неправ?

Nomadic отвечает:

В данном случае, видимо, T39C0 расценивается как псевдоним. Hо стандартом SQL-92 такое запрещено в DELETE.

Цитата собственно из этого стандарта (сборник из delete и names and identifiers, определение identifier пропущено, просто набор <simple latin letter> | <digit>, начинается с буквы):

Format <delete statement: positioned>::= delete from <table name> where current of <cursor name>

<table name> ::= <qualified name> | <qualified local name>

<qualified name> ::= [<shema name><period>] [<qualified identifier>]

<qualified identifier> ::=<identifier>

<shema name>::=[<catalog name><period>]<unqualified shema name>

<unqualified shema name>::=<identifier>

<catalog name>::=<identifier>

<qualified local name>::= MODULE <period><local table name>

<local table name>::=<qualified identifier>

Стандартом запрещено вот такое

select test.a, p_test.a from test p_test;

вот это не по стандарту, хотя Microsoft SQL Server такое ест. 

Поиск с помощью SQL

Delphi 1 

Предположим:

1. если вашей таблицы определены следующие поля…

last_name char (n),

first_name char (n)

то…

select

 last_name+', '+first_name

from

 person

where

 first_name='john'

2. если вашей таблицы определены следующие поля…

person_name char (n) (например, Lennon, John)

то…

select

 person_name

from

 person

where

 person_name like '%John' <--- 'John' должен быть в конце строки, еще используйте '%John%' 

Как получить результирующим полем разницу между хранимой датой и текущей датой?

Nomadic отвечает:

SELECT CAST((поле_с_датой –"NOW") AS INTEGER) FROM MyBase

Получишь результат в днях. 

SQL и поле даты

Delphi 1 

Есть множество способов сделать это:

1. Если дата константа, используйте:

WHERE Date = #31/11/95#

В зависимости от «настроек вашей страны», это могло бы быть и #11/31/95#. Попробуйте оба: один из них работает.

2. Если дата является переменной, вы должны воспользоваться параметром, например так:

WHERE Date = :MyDate

Затем, после нажатия на ok, выберите в Инспекторе Объектов для Query свойство Params, нажмите на кнопку с тремя точками, и установите MyDate как тип Date.

SELECT * from PFMANUAL WHERE PRMANUAL."DATE" = "31/11/95"

Я обнаружил это после решения аналогичной проблемы, когда для создания QBE-запроса я использовал DataBase Desktop, а затем «переводил» запрос на SQL.

SQL-запросы в Delphi

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

1. Введение

Компоненты Delphi для работы с базами данных были созданы в расчете на работу с SQL и архитектурой клиент/сервер. При работе с ними вы можете воспользоваться характеристиками расширенной поддержки удаленных серверов. Delphi осуществляет эту поддержку двумя способами. Во-первых, непосредственные команды из Delphi позволяют разработчику управлять таблицами, устанавливать пределы, удалять, вставлять и редактировать существующие записи. Второй способ заключается в использовании запросов на языке SQL, где строка запроса передается на сервер для ее разбора, оптимизации, выполнения и передачи обратно результатов.

Данный документ делает акцент на втором методе доступа к базам данных, на основе запросов SQL (pass-through). Авторы не стремились создать курсы по изучению синтаксиса языка SQL и его применения, они ставили перед собой цель дать несколько примеров использования компонентов TQuery и TStoredProc. Но чтобы сделать это, необходимо понимать концепцию SQL и знать как работают selects, inserts, updates, views, joins и хранимые процедуры (stored procedures). Документ также вскользь касается вопросов управления транзакциями и соединения с базой данных, но не акцентирует на этом внимание. Итак, приступая к теме, создайте простой запрос типа SELECT и отобразите результаты.

2. Компонент TQuery

Если в ваших приложениях вы собираетесь использовать SQL, то вам непременно придется познакомиться с компонентом TQuery. Компоненты TQuery и TTable наследуются от TDataset. TDataset обеспечивает необходимую функциональность для получения доступа к базам данных. Как таковые, компоненты TQuery и TTable имеют много общих признаков. Для подготовки данных для показа в визуальных компонентах используется все тот же TDatasource. Также, для определения к какому серверу и базе данных необходимо получить доступ, необходимо задать имя псевдонима. Это должно выполняться установкой свойства aliasName объекта TQuery.

Свойство SQL

Все же TQuery имеет некоторую уникальную функциональность. Например, у TQuery имеется свойство с именем SQL. Свойство SQL используется для хранения SQL-запроса. Ниже приведены основные шаги для составления запроса, где все служащие имеют зарплату свыше $50,000.

1. Создайте объект TQuery

2. Задайте псевдоним свойству DatabaseName. (Данный пример использует псевдоним IBLOCAL, связанный с демонстрационной базой данных employee.gdb).

3. Выберите свойство SQL и щелкните на кнопке с текстом - '…' (три точки, Инспектор Объектов — В.О.). Должен появиться диалог редактора списка строк (String List Editor).

4. Введите: Select * from EMPLOYEE where SALARY>50000. Нажмите OK.

5. Выберите в Инспекторе Объектов свойство Active и установите его в TRUE.

6. Разместите на форме объект TDatasource.

7. Установите свойство Dataset у TDatasource в Query1.

8. Разместите на форме TDBGrid.

9. Установите его свойство Datasource в Datasource1.

Свойство SQL имеет тип TStrings. Объект TStrings представляет собой список строк, и чем-то похож на массив. Тип данных TStrings имеет в своем арсенале команды добавления строк, их загрузки из текстового файла и обмена данными с другим объектом TStrings. Другой компонент, использующий TStrings — TMemo. В демонстрационном проекте ENTRSQL.DPR (по идее, он должен находится на отдельной дискетте, но к "Советам по Delphi" она не прилагается — В.О.), пользователь должен ввести SQL-запрос и нажать кнопку "Do It" ("сделать это"). Результаты запроса отображаются в табличной сетке. В Листинге 1 полностью приведен код обработчика кнопки "Do It".

Листинг 1

procedure TForm1.BitBtn1Click(Sender: TObject);

begin

 Query1.close; {Деактивируем запрос в качестве одной из мер предосторожности }

 Query1.SQL.Clear; {Стираем любой предыдущий запрос}

 If Memo1.Lines[0] <> '' {Проверяем на предмет пустого ввода} then

  Query1.SQL.Add(Memo1.Text) {Назначаем свойству SQL текст Memo}

 else begin

  messageDlg('Не был введен SQL-запрос', mtError, [mbOK], 0);

  exit;

 end;

 try {перехватчик ошибок}

  Query1.Open; {Выполняем запрос и открываем набор данных}

 except {секция обработки ошибок}

 On e : EDatabaseError do {e – новый дескриптор ошибки}

  messageDlg(e.message, mtError, [mbOK],0); {показываем свойство message объекта e}

1 ... 33 34 35 36 37 38 39 40 41 ... 123
На этой странице вы можете бесплатно читать книгу Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров бесплатно.

Оставить комментарий