Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001
- Название:Советы по Delphi. Версия 1.4.3 от 1.1.2001
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 краткое содержание
…начиная с 1001. Смотрите другие файлы…
Советы по Delphi. Версия 1.4.3 от 1.1.2001 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
NAMES, NATIONAL, NATURAL, NCHAR, NO, NOT, NULL, NUM_LOG_BUFFERS, NUMERIC
OF, ON, ONLY, OPTION, OR, ORDER, OUTER, OUTPUT_TYPE, OVERFLOW
PAGE_SIZE, PAGE, PAGES, PARAMETER, PASSWORD, PLAN, POSITION, POST_EVENT, PRECISION, PROCEDURE, PROTECTED, PRIMARY, PRIVILEGES
RAW_PARTITIONS, RDB$DB_KEY, READ, REAL, RECORD_VERSION, REFERENCES, RESERV, RESERVING, RETAIN, RETURNING_VALUES, RETURNS, REVOKE, RIGHT, ROLLBACK
SECOND, SEGMENT, SELECT, SET, SHARED, SHADOW, SCHEMA, SINGULAR, SIZE, SMALLINT, SNAPSHOT, SOME, SORT, SQLCODE, STABILITY, STARTING, STARTS, STATISTICS, SUB_TYPE, SUBSTRING, SUM, SUSPEND
TABLE, THEN, TIME, TIMESTAMP, TIMEZONE_HOUR, TIMEZONE_MINUTE, TO, TRAILING, TRANSACTION, TRIGGER, TRIM
UNCOMMITTED, UNION, UNIQUE, UPDATE, UPPER, USER
VALUE, VALUES, VARCHAR, VARIABLE, VARYING, VIEW
WAIT, WHEN, WHERE, WHILE, WITH, WORK, WRITE
YEAR
Операторы:
||, –, *, /, <>, <, >, ,(запятая), =, <=, >=, ~=, !=, ^=, (, )
Сиротские Master-записи
Как с помощью SQL найти записи таблицы, которых нет в другой таблице?
Вот пример:
withPeopleHiddenForm.PersonQuery.SQL do begin
Add('Select P.Last, P.First, P.Middle, P."Suffix", P.KeyNo, COUNT(PersMemL.PersonKeyNo)');
Add('From Person P Left Outer Join ');
Add(' PersMemL PersMemL');
Add('On ((P.KeyNo = PersMemL.PersonKeyNo))');
Add('Group By P.Last, P.First, P.Middle, P.Suffix, P.KeyNo');
Add('Having ((Count(PersmemL.PersonKeyNo) = 0))');
Данный код позволяет связаться с таблицей (PersMemL), содержащей количество ключей персональной записи и запись членства. Запрос возвращает имена персон, которые не имеют записей членства.
На практике этот способ оказывается очень эффективным, по крайней мере, с локальным SQL в таблицах Paradox.
David G. Wachtel
Назначение SQL-счетчика переменной
Delphi 1
query.Close;
query.SQL.Clear;
query.SQL.Add('select count(*) from table where field = :XXX');
Query.ParamByName('XXX').AsString := value;
query.Open;
whileQuery.Eof <> True do begin
SqlCount := Query.Fields[0].AsInteger;
Query.Next
end;
Подразумевается наличие компонентов TTable, TQuery, TStoredProc
Объявление
propertyRecordCount: Longint;
Описание
Времени исполнения и только для чтения. Свойство RecordCount определяет количество записей в наборе данных. Количество возвращаемых записей может зависеть от сервера и не зависит от границ задаваемого диапазона.
Как удобнее работать с динамически формируемыми запросами?
Nomadicсоветует:
В процессе работы с БД иногда необходимо выполнить какие-то мелкие запросы. Держать для этого где-то временную Query меня лично ломает, посему ловите творение (под Delphi) — модуль для создания временных TQuery и работы с ними.
примеры использования:
varS: string;
…
S := FastLookUp(format('select A.F1 from A,B where A.F4=B.F4 and B.F9=%d', [1]));
withGiveMeResultSet( 'select*from A where F1="777"' ) do try
……
finally
Free; {не забудьте!}
end;
…
if NOT ExecuteSQL('delete from A') thenShowMessage('Something Wrong');
……
Сам модуль идёт ниже —
{
Temporary Queries Creatin' and handlin'
(c) 1997-98 by Volok Alexander (D1/D2)
creation date: 30.10.1997
last update : 17.06.1998
}
unitTmpQuery;
interface
usesDBTables;
constInternalDBname = 'MAIN'; {Изменять по вкусу - TDataBase.DataBaseName}
typeTSQLScript = {$IFDEF WIN32} string{$ELSE} PChar {$ENDIF};
{Создаст куери с текстом запроса, но не откроет его}
functionCreateTempQuery(SQLscript: TSQLscript): TQuery;
{Создаст куери и откроет запрос - не забудьте прибить}
functionGiveMeResultSET(SQLscript: TSQLscript): TQuery;
{Проверит непустоту выборки, заданной ...}
functionCheckExistence(SQLscript: TSQLscript): boolean;
{Вытащит аж одно значение(лукап) из выборки, заданной ...}
functionFastLookUP(SQLscript: TSQLscript): string;
{Выполнит запрос и сообщит результат}
functionExecuteSQL(SQLscript: TSQLscript): boolean;
implementation
usesForms;
functionCreateTempQuery(SQLscript: TSQLscript): TQuery;
begin
Result:= TQuery.Create(Application);
withResult do begin
DatabaseName := InternalDBname;
{$IFDEF WIN32}
SQL.Text := SQLscript;
{$ELSE}
SQL.SetText(SQLscript);
{$ENDIF}
end;
end;
functionExecuteSQL(SQLscript: TSQLscript): boolean;
begin
withCreateTempQuery(SQLscript) do begin
try
ExecSQL;
Result := True;
except
Result := False;
end;
Free;
end;
end;
functionCheckExistence(SQLscript: TSQLscript): boolean;
begin
withGiveMeResultSET(SQLscript) do begin
Result := NOTEOF;
Free;
end;
end;
functionGiveMeResultSET(SQLscript: TSQLscript): TQuery;
begin
Result := CreateTempQuery(SQLscript);
withResult do try
Open;
except
Free;
Result:= NIL;
end;
end;
functionFastLookUP(SQLscript: TSQLscript): string;
begin
withGiveMeResultSET(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 пропущено, просто набор | , начинается с буквы):
Format ::= delete from
::= [] []
::=
::=[]
::=
::=
::= MODULE
::=
Стандартом запрещено вот такое
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
Интервал:
Закладка: