📄 ibutils.pas
字号:
{************************************************************************}
{ }
{ Borland Delphi Visual Component Library }
{ InterBase Express core components }
{ }
{ Copyright (c) 1998-2001 Borland Software Corporation }
{ }
{ InterBase Express is based in part on the product }
{ Free IB Components, written by Gregory H. Deatz for }
{ Hoagland, Longo, Moran, Dunst & Doukas Company. }
{ Free IB Components is used under license. }
{ }
{ The contents of this file are subject to the InterBase }
{ Public License Version 1.0 (the "License"); you may not }
{ use this file except in compliance with the License. You may obtain }
{ a copy of the License at http://www.borland.com/interbase/IPL.html }
{ Software distributed under the License is distributed on }
{ an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either }
{ express or implied. See the License for the specific language }
{ governing rights and limitations under the License. }
{ The Original Code was created by InterBase Software Corporation }
{ and its successors. }
{ Portions created by Borland Software Corporation are Copyright }
{ (C) Borland Software Corporation. All Rights Reserved. }
{ Contributor(s): Jeff Overcash }
{ }
{************************************************************************}
unit IBUtils;
interface
uses
{$IFDEF MSWINDOWS}
Windows,
{$ENDIF}
{$IFDEF LINUX}
Types,
{$ENDIF}
Classes, SysUtils, DB, DBCommon;
const
{$IFDEF MSWINDOWS}
CRLF = #13 + #10;
{$ENDIF}
{$IFDEF LINUX}
CRLF = #10;
{$ENDIF}
CR = #13;
LF = #10;
TAB = #9;
NULL_TERMINATOR = #0;
function Max(n1, n2: Integer): Integer;
function Min(n1, n2: Integer): Integer;
function RandomString(iLength: Integer): String;
function RandomInteger(iLow, iHigh: Integer): Integer;
function StripString(st: String; CharsToStrip: String): String;
function FormatIdentifier(Dialect: Integer; Value: String): String;
function FormatIdentifierValue(Dialect: Integer; Value: String): String;
function ExtractIdentifier(Dialect: Integer; Value: String): String;
function QuoteIdentifier(Dialect: Integer; Value: String): String;
function AddIBParamSQLForDetail(Params: TParams; SQL: string; Native: Boolean; Dialect : Integer): string;
implementation
function Max(n1, n2: Integer): Integer;
begin
if (n1 > n2) then
result := n1
else
result := n2;
end;
function Min(n1, n2: Integer): Integer;
begin
if (n1 < n2) then
result := n1
else
result := n2;
end;
function RandomString(iLength: Integer): String;
begin
result := '';
while Length(result) < iLength do
result := result + IntToStr(RandomInteger(0, High(Integer)));
if Length(result) > iLength then
result := Copy(result, 1, iLength);
end;
function RandomInteger(iLow, iHigh: Integer): Integer;
begin
result := Trunc(Random(iHigh - iLow)) + iLow;
end;
function StripString(st: String; CharsToStrip: String): String;
var
i: Integer;
begin
result := '';
for i := 1 to Length(st) do begin
if AnsiPos(st[i], CharsToStrip) = 0 then
result := result + st[i];
end;
end;
function FormatIdentifier(Dialect: Integer; Value: String): String;
begin
Value := Trim(Value);
if Dialect = 1 then
Value := AnsiUpperCase(Value)
else
if (Value <> '') and (Value[1] = '"') then
Value := '"' + StringReplace (TrimRight(Value), '"', '""', [rfReplaceAll]) + '"'
else
Value := AnsiUpperCase(Value);
Result := Value;
end;
function FormatIdentifierValue(Dialect: Integer; Value: String): String;
begin
Value := Trim(Value);
if Dialect = 1 then
Value := AnsiUpperCase(Value)
else
begin
if (Value <> '') and (Value[1] = '"') then
begin
Delete(Value, 1, 1);
Delete(Value, Length(Value), 1);
Value := StringReplace (Value, '""', '"', [rfReplaceAll]);
end
else
Value := AnsiUpperCase(Value);
end;
Result := Value;
end;
function ExtractIdentifier(Dialect: Integer; Value: String): String;
begin
Value := Trim(Value);
if Dialect = 1 then
Value := AnsiUpperCase(Value)
else
begin
if (Value <> '') and (Value[1] = '"') then
begin
Delete(Value, 1, 1);
Delete(Value, Length(Value), 1);
Value := StringReplace (Value, '""', '"', [rfReplaceAll]);
end
else
Value := AnsiUpperCase(Value);
end;
Result := Value;
end;
function QuoteIdentifier(Dialect: Integer; Value: String): String;
begin
if Dialect = 1 then
Value := AnsiUpperCase(Trim(Value))
else
Value := '"' + StringReplace (Value, '"', '""', [rfReplaceAll]) + '"';
Result := Value;
end;
function AddIBParamSQLForDetail(Params: TParams; SQL: string; Native: Boolean; Dialect : Integer): string;
const
SWhere = ' where '; { do not localize }
SAnd = ' and '; { do not localize }
function GenerateParamSQL: string;
var
I: Integer;
begin
for I := 0 to Params.Count -1 do
begin
if I > 0 then Result := Result + SAnd;
if Native then
Result := Result + format('%s = ?', [QuoteIdentifier(Dialect, Params[I].Name)]) {do not localize}
else
Result := Result + format('%0:s = :%0:s', [QuoteIdentifier(Dialect, Params[I].Name)]); {do not localize}
end;
if pos(SWhere, LowerCase(Result)) > 0 then
Result := SAnd + Result
else
Result := SWhere + Result;
end;
function AddWhereClause: string;
var
Start: PChar;
Rest, FName: string;
SQLToken, CurSection: TSQLToken;
begin
Start := PChar(SQL);
CurSection := stUnknown;
repeat
SQLToken := NextSQLToken(Start, FName, CurSection);
until SQLToken in [stFrom, stEnd];
if SQLToken = stFrom then
NextSQLToken(Start, FName, CurSection);
Rest := string(Start);
if Rest = '' then
Result := SQL + ' ' + GenerateParamSQL
else
Result := Copy(SQL, 1, pos(Rest, SQL)) + ' ' + GenerateParamSQL + Rest;
end;
begin
Result := SQL;
if (Params.Count > 0) then
Result := AddWhereClause;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -