小编pei*_* F.的帖子

sqlite3 数据库被锁定

当我必须从actions表中删除记录时,出现数据库锁定错误。

有两个程序可以在 sqlite3 数据库上读写

一个是将硬件操作的结果写入sqlite3表上的ac程序,另一个是从sqlite读取记录并处理它们并在完成作业后删除行的python脚本。

但是python脚本database is locked在删除行时显示错误..

数据库名称: db.db

数据库表: TABLE 'actions' ( 'rid' INTEGER PRIMARY KEY AUTOINCREMENT, 'owner' INTEGER, 'action' TEXT, 'node' TEXT, 'value' TEXT

蟒蛇脚本:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sqlite3
import time
import os.path
import requests
#import urllib.parse

#defines
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
db_path = os.path.join(BASE_DIR+"/dbs/", "db.db")
wd_file_path = os.path.join(BASE_DIR, "wd")
pid = os.getpid()
conn = sqlite3.connect(db_path, isolation_level=None ,timeout=30000)
print ("Opened database successfully");
while True:
    res = conn.execute("select * from …
Run Code Online (Sandbox Code Playgroud)

python sqlite

6
推荐指数
1
解决办法
6801
查看次数

ut64字符串的base64编码

我有rad studio xe5我使用indy EncodeString来编码输入字符串...

我的代码是这样的:

procedure TForm5.Button2Click(Sender: TObject);
var
  UTF8: UTF8String;
begin
UTF8 := UTF8Encode(m1.Text);
m2.Text := ind.EncodeString(UTF8);
end;
Run Code Online (Sandbox Code Playgroud)

但utf-8输入的输出是错误的

orange  --> b3Jhbmdl  [correct]
book   --> Ym9vaw==   [correct]
????  -->  Pz8/Pw==   [wrong]
????  --> Pz8/Pw==   [wrong]
????  --> Pz8/Pw==   [wrong]
Run Code Online (Sandbox Code Playgroud)

对于所有输入的utf-8,它返回同样的输出!!! 我的代码有什么问题,我怎么能用utf-8字符串获得base64编码的好结果

delphi encoding utf-8

5
推荐指数
2
解决办法
1万
查看次数

delphi变量值在循环中的线程处更改

我的代码正在运行for循环来处理一些数据,如下所示

procedure printValue(Value: Integer);
begin
  TThread.Synchronize(TThread.Current, procedure
  begin
   form1.memo1.lines.add( Value.ToString );
  end);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
  myThread : TThread;
  Proc1: TMyProc;
begin
  for I := 0 to 10 do
  begin
    myThread := TThread.CreateAnonymousThread(
    procedure
    begin
      printValue( i );
    end);
    myThread.Start;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

输出的代码是这样的:

3
5
6
8
9
11
10
4
11
4
7
Run Code Online (Sandbox Code Playgroud)

这不好,所以我sleep(1)在线程启动后添加了一个小的延迟。这将解决输出问题,但不是一个好主意,因为在大循环中会阻塞ui线程,因此请尝试使用此文档作为帮助,这样我的代码就会这样更改:

function CaptureValue(Value: Integer): TMyProc;
begin
  Result := procedure begin Writeln(Value); end;
end;

procedure printValue(Value: Integer);
begin
  TThread.Synchronize(TThread.Current, procedure …
Run Code Online (Sandbox Code Playgroud)

delphi

3
推荐指数
1
解决办法
194
查看次数

Delphi从Android上的Form中删除FireMonkey元素

我在表单上使用此代码在OnShow事件中创建了一个元素:

procedure TForm4.FormShow(Sender: TObject);
var
  VertScrollLink:TVertScrollBox;
begin
  VertScrollLink := TVertScrollBox.Create(form4);
  VertScrollLink.Align := TAlignLayout.Client;
  VertScrollLink.Parent := form4;
end;
Run Code Online (Sandbox Code Playgroud)

在某些操作上,我需要动态删除布局:

for LIndex := form4.ComponentCount-1 downto 0 do
begin
  if (form4.Components[LIndex].ToString='TVertScrollBox') then
  begin
    //showmessage(form4.Components[LIndex].ToString);
    form4.Components[LIndex].Free;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

此代码在Windows上运行良好,但不会删除Android上的任何内容.

delphi firemonkey delphi-xe7 delphi-10-seattle delphi-10.1-berlin

2
推荐指数
1
解决办法
695
查看次数

Delphi TTrackBar 没有完整事件

Delphi TTrackBar 有两个事件用于跟踪更改:

  1. 变化时

  2. 追踪中

但他们俩都做同样的事情。例如:

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
  ShowMessage(TrackBar1.Value.ToString);
end;
Run Code Online (Sandbox Code Playgroud)

任何小的变化都会显示10消息。

如何检测手机上的最后更改?所有跟踪之后都必须发生更改吗?

delphi firemonkey delphi-10-seattle delphi-10.1-berlin

1
推荐指数
1
解决办法
745
查看次数

从TMemorystream读取的delphi而不改变位置

我有一个从进程填充的TMemory流,我需要实时读取它的其他部分。当我使用此代码时:

for i := 0 to j do
begin
    FOutputStream.position:=i * 194
    stream4.CopyFrom(FOutputStream,   194 );
end;
Run Code Online (Sandbox Code Playgroud)

它返回错误的数据,因为编写器进程更改了位置。所以我决定使用Memory属性

stream4.CopyFrom( PByte(FOutputStream.Memory)[ i * 194 ] , 194) );
Run Code Online (Sandbox Code Playgroud)

但是我得到这个错误

[DCC错误] Unit1.pas(640):E2010不兼容的类型:'TStream'和'Byte'

我该如何处理此错误?

delphi

1
推荐指数
1
解决办法
179
查看次数

delphi 一种将十六进制字符串转换为二进制字符串的快速方法

我必须像这样将十六进制字符串转换为二进制字符串

"F" -> "?1111?"
"A" -> "?1010?"
"1AF1" -> "1101011110001"
Run Code Online (Sandbox Code Playgroud)

我有这个功能:

function HexToBin(Hexadecimal: string): string;
const
  BCD: array [0..15] of string =
    ('0000', '0001', '0010', '0011', '0100', '0101', '0110', '0111',
    '1000', '1001', '1010', '1011', '1100', '1101', '1110', '1111');
var
  i: integer;
begin
  Result := '';
  for i := Length(Hexadecimal) downto 1 do
    Result := BCD[StrToInt('$' + Hexadecimal[i])] + Result;
end; 
Run Code Online (Sandbox Code Playgroud)

我这样称呼它:

for I := 0 to Trunc(tcpFrame.Length/100) do
begin
   str := copy(tcpFrame , (I*100)+1 , 100  );
   data  := data …
Run Code Online (Sandbox Code Playgroud)

delphi

0
推荐指数
1
解决办法
714
查看次数