📄 initdata.pas
字号:
unit InitData;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, TFlatGaugeUnit, StdCtrls, DB, ADODB, IdBaseComponent,
IdAntiFreezeBase, IdAntiFreeze, fdef, Buttons;
type
TInitDataForm = class(TForm)
Label1: TLabel;
FlatGauge1: TFlatGauge;
Label2: TLabel;
FlatGauge2: TFlatGauge;
StatusBar1: TStatusBar;
IdAntiFreeze1: TIdAntiFreeze;
WorkQuery: TADOQuery;
MC: TADOConnection;
BitBtn1: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
procedure FormPaint(Sender: TObject);
private
FStockName: string;
procedure SetStockName(const Value: string);
{ Private declarations }
public
StkDataFile: IDataFile;
property StockName: string read FStockName write SetStockName;
end;
var
InitDataForm: TInitDataForm;
implementation
uses Math, fUtils, UCommon, Main;
{$R *.dfm}
{ TInitDataForm }
procedure TInitDataForm.SetStockName(const Value: string);
begin
if (StkDataFile = nil) or (Value <> FStockName) then
begin
FStockName := Value;
StkDataFile := TDataFile.Create(FStockName);
end;
end;
procedure TInitDataForm.BitBtn1Click(Sender: TObject);
var
SQL_Str : string;
Head, RecSize: Word;
ZCode, Code, Name: string;
Buffer : ^string;
MS : TMemoryStream;
Max, I : Integer;
P, Q : PStkDataRec;
dao : OleVariant;
begin
SQL_Str := 'Select TOP 3 * From BaseInfo Where (日期=' + '#' + DateToStr(Date) + '#' + ')';
WorkQuery.Active := false;
WorkQuery.SQL.Clear;
WorkQuery.SQL.ADD(SQL_Str);
WorkQuery.Open;
if (WorkQuery.Recordcount <= 0) then
begin
//因为没有读入过所以要进行读入
Head := 41;
RecSize := 250;
MS := TMemoryStream.Create;
MS.LoadFromFile('szex.tnf');
MS.Position := 50;
I := 0;
Max := (MS.Size - 50) div 250;
FlatGauge1.Progress := 0;
FlatGauge1.Visible := True;
while MS.Position < MS.Size - 4 do
begin
GetMem(Buffer, MS.Size);
MS.ReadBuffer(Buffer^, 6);
Code := trim(string(Buffer));
SQL_Str := 'Select Top 1 * From BASEINFO Where (股票代号=' + #39 + Copy(Code, 1, 6) + #39 + ')';
WorkQuery.Active := false;
WorkQuery.SQL.Clear;
WorkQuery.SQL.ADD(SQL_Str);
WorkQuery.Open;
MS.Position := MS.Position + 18;
MS.Read(Buffer^, 8);
Name := TrimLeft(string(Buffer));
MS.Position := MS.Position + 209;
MS.Read(Buffer^, 4);
ZCode := trim(string(Buffer));
StockName := '.\Vipdoc\sz\lday\sz' + Copy(Code, 1, 6) + '.day';
begin
try
Q := PStkDataRec(StkDataFile.getData(1));
if Q <> nil then
begin
if (INtToStr(Q.CP) <> '') then
begin
P := PStkDataRec(StkDataFile.getData(0));
if (WorkQuery.Recordcount > 0) then
begin
WorkQuery.Edit;
WorkQuery.FieldByName('股票名称').AsString := Copy(Name, 1, 8);
WorkQuery.FieldByName('昨收价').AsFloat := Q.CP / 100;
WorkQuery.FieldByName('现价').AsFloat := P.CP / 100;
WorkQuery.FieldByName('开盘价').AsFloat := P.OP / 100;
WorkQuery.FieldByName('最高价').AsFloat := P.HP / 100;
WorkQuery.FieldByName('最低价').AsFloat := P.LP / 100;
WorkQuery.FieldByName('升跌额').AsFloat := (P.CP / 100) - (Q.CP / 100);
WorkQuery.FieldByName('成交量').AsFloat := P.VOL / 100;
WorkQuery.FieldByName('涨幅').AsFloat := (P.CP - Q.CP) / Q.CP * 100;
WorkQuery.FieldByName('日期').AsDateTime := Date;
WorkQuery.Post;
end
else
begin
WorkQuery.Append;
WorkQuery.FieldByName('股票代号').AsString := Copy(Code, 1, 6);
WorkQuery.FieldByName('标志').AsString := '3';
WorkQuery.FieldByName('股票名称').AsString := Copy(Name, 1, 8);
WorkQuery.FieldByName('助记码').AsString := Copy(ZCode, 1, 4);
WorkQuery.FieldByName('昨收价').AsFloat := Q.CP / 100;
WorkQuery.FieldByName('现价').AsFloat := P.CP / 100;
WorkQuery.FieldByName('开盘价').AsFloat := P.OP / 100;
WorkQuery.FieldByName('最高价').AsFloat := P.HP / 100;
WorkQuery.FieldByName('最低价').AsFloat := P.LP / 100;
WorkQuery.FieldByName('升跌额').AsFloat := (P.CP / 100) - (Q.CP / 100);
WorkQuery.FieldByName('成交量').AsFloat := P.VOL / 100;
WorkQuery.FieldByName('涨幅').AsFloat := (P.CP - Q.CP) / Q.CP * 100;
WorkQuery.FieldByName('日期').AsDateTime := Date;
WorkQuery.Post;
end;
end;
end;
except
end;
end;
MS.Position := MS.Position + 5;
I := I + 1;
FlatGauge1.Progress := Round(I / Max * 100);
end;
MS.Free;
//===================================================
// 在此做上海股标
//===================================================
MS := TMemoryStream.Create;
MS.LoadFromFile('shex.tnf');
MS.Position := 50;
I := 0;
Max := (MS.Size - 50) div 250;
FlatGauge2.Progress := 0;
FlatGauge2.Visible := True;
while MS.Position < MS.Size - 4 do
begin
GetMem(Buffer, MS.Size);
MS.ReadBuffer(Buffer^, 6);
Code := trim(string(Buffer));
MS.Position := MS.Position + 18;
MS.Read(Buffer^, 8);
Name := TrimLeft(string(Buffer));
MS.Position := MS.Position + 209;
MS.Read(Buffer^, 4);
ZCode := trim(string(Buffer));
StockName := '.\Vipdoc\sh\lday\sh' + Copy(Code, 1, 6) + '.day';
begin
try
Q := PStkDataRec(StkDataFile.getData(1));
if Q <> nil then
begin
if (INtToStr(Q.CP) <> '') then
begin
P := PStkDataRec(StkDataFile.getData(0));
SQL_Str := 'Select Top 1 * From BASEINFO Where (股票代号=' + #39 + Copy(Code, 1, 6) + #39 + ')';
WorkQuery.Active := false;
WorkQuery.SQL.Clear;
WorkQuery.SQL.ADD(SQL_Str);
WorkQuery.Open;
if (Copy(Code, 1, 1) <> '0') then
begin
if (WorkQuery.Recordcount > 0) then
begin
WorkQuery.Edit;
WorkQuery.FieldByName('股票名称').AsString := Copy(Name, 1, 8);
WorkQuery.FieldByName('昨收价').AsFloat := Q.CP / 100;
WorkQuery.FieldByName('现价').AsFloat := P.CP / 100;
WorkQuery.FieldByName('开盘价').AsFloat := P.OP / 100;
WorkQuery.FieldByName('最高价').AsFloat := P.HP / 100;
WorkQuery.FieldByName('最低价').AsFloat := P.LP / 100;
WorkQuery.FieldByName('升跌额').AsFloat := (P.CP / 100) - (Q.CP / 100);
WorkQuery.FieldByName('成交量').AsFloat := P.VOL / 100;
WorkQuery.FieldByName('涨幅').AsFloat := (P.CP - Q.CP) / Q.CP * 100;
WorkQuery.FieldByName('日期').AsDateTime := Date;
WorkQuery.Post;
end
else
begin
WorkQuery.Append;
WorkQuery.FieldByName('股票代号').AsString := Copy(Code, 1, 6);
WorkQuery.FieldByName('标志').AsString := '3';
WorkQuery.FieldByName('股票名称').AsString := Copy(Name, 1, 8);
WorkQuery.FieldByName('助记码').AsString := Copy(ZCode, 1, 4);
WorkQuery.FieldByName('昨收价').AsFloat := Q.CP / 100;
WorkQuery.FieldByName('现价').AsFloat := P.CP / 100;
WorkQuery.FieldByName('开盘价').AsFloat := P.OP / 100;
WorkQuery.FieldByName('最高价').AsFloat := P.HP / 100;
WorkQuery.FieldByName('最低价').AsFloat := P.LP / 100;
WorkQuery.FieldByName('升跌额').AsFloat := (P.CP / 100) - (Q.CP / 100);
WorkQuery.FieldByName('成交量').AsFloat := P.VOL / 100;
WorkQuery.FieldByName('涨幅').AsFloat := (P.CP - Q.CP) / Q.CP * 100;
WorkQuery.FieldByName('日期').AsDateTime := Date;
WorkQuery.Post;
end;
end;
end;
end;
except
end;
end;
MS.Position := MS.Position + 5;
I := I + 1;
FlatGauge2.Progress := Round(I / Max * 100);
end;
end;
Self.Close;
end;
procedure TInitDataForm.FormPaint(Sender: TObject);
begin
Self.BitBtn1.Click;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -