亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sqlitetable3u.pas

?? 定時器for timer for ic chip
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
  Stmt: TSQLiteStmt;
  NextSQLStatement: PAnsiChar;
  iStepResult: integer;
  ptr: pointer;
  iNumBytes: integer;
  thisBlobValue: TMemoryStream;
  thisStringValue: pWideString;
  thisDoubleValue: pDouble;
  thisIntValue: pInt64;
  thisColType: pInteger;
  I: integer;
  DeclaredColType: PAnsiChar;
  ActualColType: integer;
  ptrValue: PAnsiChar;
Begin
  Try
    self.fRowCount := 0;
    self.fColCount := 0;
    //if there are several SQL statements in SQL, NextSQLStatment points to the
    //beginning of the next one. Prepare only prepares the first SQL statement.
    If Sqlite3_Prepare(DB.fDB, UTF8(SQL), -1, Stmt, NextSQLStatement) <> SQLITE_OK Then
      DB.RaiseError('Error executing SQL', SQL);
    If (Stmt = Nil) Then
      DB.RaiseError('Could not prepare SQL statement', SQL);
    iStepResult := Sqlite3_step(Stmt);
    While (iStepResult <> SQLITE_DONE) Do
    Begin
      Case iStepResult Of
        SQLITE_ROW:
          Begin
            Inc(fRowCount);
            If (fRowCount = 1) Then
            Begin
              //get data types
              fCols := TTntStringList.Create;
              fColTypes := TList.Create;
              fColCount := SQLite3_Column_Count(Stmt);
              For I := 0 To Pred(fColCount) Do
                fCols.Add(WideUpperCase(UnUTF8(Sqlite3_Column_Name(Stmt, I))));
              For I := 0 To Pred(fColCount) Do
              Begin
                New(thisColType);
                DeclaredColType := Sqlite3_Column_DeclType(Stmt, I);
                If DeclaredColType = Nil Then
                  thisColType^ := Sqlite3_Column_Type(Stmt, I) //use the actual column type instead
                  //seems to be needed for last_insert_rowid
                Else
                  If (DeclaredColType = 'INTEGER') Or (DeclaredColType = 'BOOLEAN') Then
                    thisColType^ := SQLITE_INTEGER
                  Else
                    If (DeclaredColType = 'NUMERIC') Or
                      (DeclaredColType = 'FLOAT') Or
                      (DeclaredColType = 'DOUBLE') Or
                      (DeclaredColType = 'REAL') Then
                      thisColType^ := SQLITE_FLOAT
                    Else
                      If DeclaredColType = 'BLOB' Then
                        thisColType^ := SQLITE_BLOB
                      Else
                        thisColType^ := SQLITE_TEXT;
                fColTypes.Add(thisColType);
              End;
              fResults := TList.Create;
            End;

            //get column values
            For I := 0 To Pred(ColCount) Do
            Begin
              ActualColType := Sqlite3_Column_Type(Stmt, I);
              If (ActualColType = SQLITE_NULL) Then
                fResults.Add(Nil)
              Else
                If pInteger(fColTypes[I])^ = SQLITE_INTEGER Then
                Begin
                  New(thisIntValue);
                  thisIntValue^ := Sqlite3_Column_Int64(Stmt, I);
                  fResults.Add(thisIntValue);
                End
                Else
                  If pInteger(fColTypes[I])^ = SQLITE_FLOAT Then
                  Begin
                    New(thisDoubleValue);
                    thisDoubleValue^ := Sqlite3_Column_Double(Stmt, I);
                    fResults.Add(thisDoubleValue);
                  End
                  Else
                    If pInteger(fColTypes[I])^ = SQLITE_BLOB Then
                    Begin
                      iNumBytes := Sqlite3_Column_Bytes(Stmt, I);
                      If iNumBytes = 0 Then
                        thisBlobValue := Nil
                      Else
                      Begin
                        thisBlobValue := TMemoryStream.Create;
                        thisBlobValue.position := 0;
                        ptr := Sqlite3_Column_Blob(Stmt, I);
                        thisBlobValue.writebuffer(ptr^, iNumBytes);
                      End;
                      fResults.Add(thisBlobValue);
                    End
                    Else
                    Begin
                      New(thisStringValue);
                      ptrValue := Sqlite3_Column_Text(Stmt, I);
                      setString(thisStringValue^, ptrValue, StrLen(ptrValue));
                      fResults.Add(thisStringValue);
                    End;
            End;
          End;
        SQLITE_BUSY:
          Raise ESQLiteException.CreateFmt('Could not prepare SQL statement',
            [SQL, 'SQLite is Busy']);
      Else
        DB.RaiseError('Could not retrieve data', SQL);
      End;
      iStepResult := SQLite3_Step(Stmt);
    End;
    fRow := 0;
  Finally
    If Assigned(Stmt) Then
      Sqlite3_Finalize(Stmt);
  End;
End;

//..............................................................................

Destructor TSQLiteTable.Destroy;
Var
  I: cardinal;
  iColNo: integer;
Begin
  If Assigned(fResults) Then
  Begin
    For I := 0 To fResults.Count - 1 Do
    Begin
      //check for blob type
      iColNo := (I Mod fColCount);
      Case pInteger(self.fColTypes[iColNo])^ Of
        SQLITE_BLOB:
          TMemoryStream(fResults[I]).Free;
        SQLITE_TEXT:
          If fResults[I] <> Nil Then
          Begin
            setString(WideString(fResults[I]^), Nil, 0);
            Dispose(fResults[I]);
          End;
      Else
        Dispose(fResults[I]);
      End;
    End;
    fResults.Free;
  End;
  If Assigned(fCols) Then
    fCols.Free;
  If Assigned(fColTypes) Then
    For I := 0 To fColTypes.Count - 1 Do
      Dispose(fColTypes[I]);
  fColTypes.Free;
  Inherited;
End;

//..............................................................................

Function TSQLiteTable.GetColumns(I: integer): WideString;
Begin
  Result := fCols[I];
End;

//..............................................................................

Function TSQLiteTable.GetCountResult: integer;
Begin
  If Not Eof Then
    Result := StrToInt(Fields[0])
  Else
    Result := 0;
End;

Function TSQLiteTable.GetCount: integer;
Begin
  Result := fRowCount;
End;

//..............................................................................

Function TSQLiteTable.GetEOF: boolean;
Begin
  Result := fRow >= fRowCount;
End;

Function TSQLiteTable.GetBOF: boolean;
Begin
  Result := fRow <= 0;
End;

//..............................................................................

Function TSQLiteTable.GetFieldByName(FieldName: WideString): WideString;
Begin
  Result := GetFields(self.GetFieldIndex(FieldName));
End;

Function TSQLiteTable.GetFieldIndex(FieldName: WideString): integer;
Begin

  If (fCols = Nil) Then
  Begin
    Raise ESQLiteException.Create('Field ' + FieldName + ' Not found. Empty dataset');
    Exit;
  End;

  If (fCols.Count = 0) Then
  Begin
    Raise ESQLiteException.Create('Field ' + FieldName + ' Not found. Empty dataset');
    Exit;
  End;

  Result := fCols.IndexOf(AnsiUpperCase(FieldName));

  If (Result < 0) Then
  Begin
    Raise ESQLiteException.Create('Field not found in dataset: ' + FieldName)
  End;

End;

//..............................................................................

Function TSQLiteTable.GetFields(I: cardinal): WideString;
Var
  thisvalue: pWideString;
  thistype: integer;
Begin
  Result := '';
  If Eof Then
    Raise ESQLiteException.Create('Table is at End of File');
  //integer types are not stored in the resultset
  //as WideStrings, so they should be retrieved using the type-specific
  //methods
  thistype := pInteger(self.fColTypes[I])^;

  Case thistype Of
    SQLITE_TEXT:
      Begin
        thisvalue := self.fResults[(self.fRow * self.fColCount) + I];
        If (thisvalue <> Nil) Then
          //Result := thisvalue^
          Result := UnUTF8(thisvalue^)
        Else
          Result := '';
      End;
    SQLITE_INTEGER:
      Result := IntToStr(self.FieldAsInteger(I));
    SQLITE_FLOAT:
      Result := FloatToStr(self.FieldAsDouble(I));
    SQLITE_BLOB:
      Result := self.FieldAsBlobText(I);
  Else
    Result := '';
  End;
End;

Function TSQLiteTable.FieldAsBlob(I: cardinal): TMemoryStream;
Begin
  If Eof Then
    Raise ESQLiteException.Create('Table is at End of File');
  If (self.fResults[(self.fRow * self.fColCount) + I] = Nil) Then
    Result := Nil
  Else
    If pInteger(self.fColTypes[I])^ = SQLITE_BLOB Then
      Result := TMemoryStream(self.fResults[(self.fRow * self.fColCount) + I])
    Else
      Raise ESQLiteException.Create('Not a Blob field');
End;

Function TSQLiteTable.FieldAsBlobText(I: cardinal): WideString;
Var
  MemStream: TMemoryStream;
  Buffer: PAnsiChar;
Begin
  Result := '';
  MemStream := self.FieldAsBlob(I);
  If MemStream <> Nil Then
    If MemStream.size > 0 Then
    Begin
      MemStream.position := 0;
      Buffer := StrAlloc(MemStream.size + 1);
      MemStream.readbuffer(Buffer[0], MemStream.size);
      (Buffer + MemStream.size)^ := Chr(0);
      setString(Result, Buffer, MemStream.size);
      StrDispose(Buffer);
      Result := UnUTF8(Result);
    End;
End;

Function TSQLiteTable.FieldAsInteger(I: cardinal): int64;
Begin
  If Eof Then
    Raise ESQLiteException.Create('Table is at End of File');
  If (self.fResults[(self.fRow * self.fColCount) + I] = Nil) Then
    Result := 0
  Else
    If pInteger(self.fColTypes[I])^ = SQLITE_INTEGER Then
      Result := pInt64(self.fResults[(self.fRow * self.fColCount) + I])^
    Else
      If pInteger(self.fColTypes[I])^ = SQLITE_FLOAT Then
        Result := Trunc(StrToFloat(pString(self.fResults[(self.fRow * self.fColCount) + I])^))
      Else
        Raise ESQLiteException.Create('Not an integer or numeric field');
End;

Function TSQLiteTable.FieldAsDouble(I: cardinal): double;
Begin
  If Eof Then
    Raise ESQLiteException.Create('Table is at End of File');
  If (self.fResults[(self.fRow * self.fColCount) + I] = Nil) Then
    Result := 0
  Else
    If pInteger(self.fColTypes[I])^ = SQLITE_INTEGER Then
      Result := pInt64(self.fResults[(self.fRow * self.fColCount) + I])^
    Else
      If pInteger(self.fColTypes[I])^ = SQLITE_FLOAT Then
        Result := pDouble(self.fResults[(self.fRow * self.fColCount) + I])^
      Else
        Raise ESQLiteException.Create('Not an integer or numeric field');
End;

Function TSQLiteTable.FieldAsString(I: cardinal): WideString;
Begin
  If Eof Then
    Raise ESQLiteException.Create('Table is at End of File');
  If (self.fResults[(self.fRow * self.fColCount) + I] = Nil) Then
    Result := ''
  Else
    Result := self.GetFields(I);
End;

Function TSQLiteTable.FieldIsNull(I: cardinal): boolean;
Var
  thisvalue: pointer;
Begin
  If Eof Then
    Raise ESQLiteException.Create('Table is at End of File');
  thisvalue := self.fResults[(self.fRow * self.fColCount) + I];
  Result := (thisvalue = Nil);
End;

//..............................................................................

Function TSQLiteTable.Next: boolean;
Begin
  Result := False;
  If Not Eof Then
  Begin
    Inc(fRow);
    Result := True;
  End;
End;

Function TSQLiteTable.Previous: boolean;
Begin
  Result := False;
  If Not BOF Then
  Begin
    Dec(fRow);
    Result := True;
  End;
End;

Function TSQLiteTable.MoveFirst: boolean;
Begin
  Result := False;
  If self.fRowCount > 0 Then
  Begin
    fRow := 0;
    Result := True;
  End;
End;

Function TSQLiteTable.MoveLast: boolean;
Begin
  Result := False;
  If self.fRowCount > 0 Then
  Begin
    fRow := fRowCount - 1;
    Result := True;
  End;
End;

End.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一级免费一区| 在线观看视频91| 精品国免费一区二区三区| 天堂va蜜桃一区二区三区| 欧美精品乱人伦久久久久久| 日日摸夜夜添夜夜添亚洲女人| 欧美丝袜第三区| 肉丝袜脚交视频一区二区| 日韩视频一区二区三区在线播放 | 日韩欧美国产一二三区| 久久精品久久99精品久久| 亚洲精品一区二区在线观看| 国产精品 欧美精品| 中文字幕 久热精品 视频在线| 成人av动漫在线| 亚洲午夜在线观看视频在线| 欧美日韩国产经典色站一区二区三区| 日韩在线一区二区三区| 久久一夜天堂av一区二区三区| 国产精品一区二区在线观看网站| 国产精品久久久久精k8| 欧美吞精做爰啪啪高潮| 紧缚奴在线一区二区三区| 亚洲国产成人自拍| 精品视频999| 国产一区二区三区免费在线观看| 国产精品欧美综合在线| 在线观看91精品国产入口| 老司机午夜精品| 国产精品传媒视频| 91精品国产一区二区三区| 国产麻豆成人传媒免费观看| 亚洲人成网站精品片在线观看| 制服丝袜激情欧洲亚洲| 国产成a人无v码亚洲福利| 亚洲一区二区视频在线观看| 精品成人一区二区三区四区| 色综合久久99| 国产在线不卡一区| 亚洲综合一区二区三区| 久久精品综合网| 欧美性猛交xxxxxx富婆| 国产成人免费视频| 日韩影院在线观看| 国产精品第四页| 欧美tickle裸体挠脚心vk| 日本精品一区二区三区四区的功能| 美女mm1313爽爽久久久蜜臀| 尤物在线观看一区| 国产无一区二区| 日韩午夜在线影院| 91国模大尺度私拍在线视频 | 久久狠狠亚洲综合| 亚洲影视在线播放| 亚洲欧洲三级电影| 2023国产精品视频| 欧美人体做爰大胆视频| 91亚洲精华国产精华精华液| 国产精品夜夜爽| 久久精品国产成人一区二区三区| 一区二区三区波多野结衣在线观看| 久久久久久久久久电影| 日韩欧美亚洲国产精品字幕久久久 | 久久无码av三级| 91精品国产乱| 欧美日韩大陆在线| 91国模大尺度私拍在线视频| 99久久99久久免费精品蜜臀| 懂色一区二区三区免费观看| 激情文学综合网| 理论电影国产精品| 美女视频一区二区三区| 日本美女一区二区三区视频| 亚洲成人中文在线| 亚洲最大色网站| 日本美女一区二区三区| 午夜成人免费电影| 亚洲一二三区在线观看| 亚洲男人天堂av| 亚洲人精品午夜| 亚洲色图欧洲色图| 亚洲欧美日韩在线不卡| 亚洲欧洲国产专区| 亚洲精品亚洲人成人网| 夜夜夜精品看看| 亚洲综合色噜噜狠狠| 亚洲一区二区三区视频在线播放| 洋洋成人永久网站入口| 亚洲自拍偷拍综合| 日韩精品免费专区| 另类综合日韩欧美亚洲| 久久国产精品一区二区| 国产一区二区三区美女| 丰满亚洲少妇av| 99久久久久久| 欧美色图激情小说| 91精品国产aⅴ一区二区| 日韩美女主播在线视频一区二区三区| 日韩一区和二区| 久久影院午夜片一区| 国产精品久久久久婷婷| 亚洲欧洲中文日韩久久av乱码| 一区二区三区四区激情 | 亚洲综合男人的天堂| 亚洲成av人片在线| 久久精品国产亚洲高清剧情介绍| 精品亚洲porn| 成人a级免费电影| 欧美在线免费观看视频| 欧美一区二区三区四区五区| 久久久91精品国产一区二区精品 | 欧洲另类一二三四区| 欧美精品v国产精品v日韩精品 | 中文字幕+乱码+中文字幕一区| 亚洲欧美色图小说| 麻豆久久久久久| jiyouzz国产精品久久| 欧美老人xxxx18| 国产亚洲午夜高清国产拍精品| 综合激情成人伊人| 奇米影视在线99精品| 粉嫩av一区二区三区在线播放 | 久久人人超碰精品| 亚洲欧美日韩久久| 麻豆精品国产传媒mv男同| 成人国产精品免费观看动漫| 欧美精品在欧美一区二区少妇| 久久久久国产精品人| 亚洲国产另类精品专区| 国产风韵犹存在线视精品| 欧美三级资源在线| 中文字幕第一页久久| 日韩中文字幕区一区有砖一区| 国产成人久久精品77777最新版本| 在线观看成人小视频| 国产亚洲成aⅴ人片在线观看| 亚洲一区二区五区| 成人毛片老司机大片| 日韩一区二区三区四区| 亚洲欧美日本在线| 国产99精品国产| 日韩视频一区在线观看| 亚洲一卡二卡三卡四卡无卡久久| 国产成人免费av在线| 91精品国产一区二区三区蜜臀| 亚洲色图丝袜美腿| 国产成人综合自拍| 欧美刺激午夜性久久久久久久| 一区二区三区日韩| 成人夜色视频网站在线观看| 日韩精品一区二区三区swag| 亚洲高清视频中文字幕| 99这里只有久久精品视频| 久久免费看少妇高潮| 免费成人你懂的| 欧美日韩中文一区| 亚洲黄色录像片| 99久久亚洲一区二区三区青草| 国产婷婷一区二区| 国产一区在线观看视频| 日韩欧美国产小视频| 日本aⅴ精品一区二区三区| 欧美日韩一级二级三级| 亚洲中国最大av网站| 99国产精品国产精品毛片| 国产精品色哟哟| 成人性生交大合| 国产精品污www在线观看| 成人午夜在线播放| 国产精品色一区二区三区| 国产精品 欧美精品| 国产亚洲欧美日韩日本| 国产精品一区二区在线播放| 国产亚洲精品久| 懂色av噜噜一区二区三区av | 国产精品久久久久久久久久免费看| 国产一区二区三区四| 26uuu国产电影一区二区| 国产真实乱对白精彩久久| 欧美精品一区男女天堂| 韩国av一区二区| 国产欧美日韩视频在线观看| 国产福利一区二区三区视频在线| 国产性做久久久久久| 成人动漫视频在线| 综合电影一区二区三区| 一本久久精品一区二区| 亚洲一区二区三区小说| 欧美久久婷婷综合色| 蜜桃在线一区二区三区| 精品久久久久久久一区二区蜜臀| 韩国毛片一区二区三区| 中文字幕av一区二区三区免费看 | 亚洲一区二区视频在线| 欧美一区二区美女| 欧美天堂一区二区三区| 蜜臀久久久久久久| 国产午夜精品一区二区| 在线一区二区三区| 日韩高清中文字幕一区|