任何人都可以帮我弄清楚为什么ClientDataset中的计算字段没有用0.1875更新。实际上它不接受0.25,0.50,0.75,1.0 ......等。如果值为0.26,0.51 ... 0.1876 ..等,则可以更新字段。我在Delphi XE3中使用以下代码:
import threading
import sys
import Queue
import string
#argumanlarin alinmasi
if len(sys.argv)!=4:
print("Duzgun giriniz: '<filename>.py s n l'")
sys.exit(0)
else:
s=int(sys.argv[1])
n=int(sys.argv[2])
l=int(sys.argv[3])
#Global
index = 0
#kuyruk deklarasyonu
q1 = Queue.Queue(n)
q2 = Queue.Queue(2000)
lock = threading.Lock()
#Threadler
threads=[]
#dosyayi okuyarak stringe cevirme
myfile=open('metin.txt','r')
data=myfile.read()
#Thread tanimlamasi
class WorkingThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
lock.acquire()
q2.put(self.caesar(q1.get(), s))
lock.release()
def caesar(self, plaintext, shift):
alphabet = string.ascii_lowercase
shifted_alphabet = alphabet[shift:] + alphabet[:shift]
table = string.maketrans(alphabet, shifted_alphabet)
return plaintext.translate(table)
for i in range(0,n):
current_thread = WorkingThread()
current_thread.start()
threads.append(current_thread)
output_file=open("crypted"+ "_"+ str(s)+"_"+str(n)+"_"+str(l)+".txt", "w")
for i in range(0,len(data),l):
while not q1.full:
q1.put(data[index:index+l])
index+=l
while not q2.empty:
output_file.write(q2.get())
for i in range(0,n):
threads[i].join()
output_file.close()
myfile.close()
答案 0 :(得分:3)
由于您还没有提供MCVE,我创建了自己的,以及它的代码和DFM提取
在下面。它的操作应该是不言而喻的 - 它设置Value
计算
字段到ListBox中的选定值。 ListBox的OnClick的重点
处理程序调用{{1}}是为了使数据集滚动等等
调用它的OnCalcFields事件。
该项目没有表现出你所声称的问题(虽然目前还不清楚是什么 完全是指不被“接受”的价值。列表框中的任何项目 单击,相应的货币值显示在前面的DBEdit中 通过系统的curency符号,唯一的小例外是0.1875 显示为“£0.19”,因为默认情况下,该值四舍五入到小数点后两位。我的课程在D7和D10西雅图,顺便说一下。
因此,无论是什么原因导致您的问题都在您的项目中,而您却没有 包含在你的q中,它显示了MCVE的价值。
在评论中你说:
当我按下Calc按钮时,我只是将Edit1.text值分配给计算字段。
嗯,这不是你的Button1Click处理程序所做的,根据你的q中的代码。如果您 在OnCalcFields事件之外的任何地方为计算字段分配值,那么您应该检查数据集是否在适当的ClientDataSet.First
(State
)之前所以。你呢?
代码:
TDataSetState
DFM提取
type
TForm1 = class(TForm)
ClientDataSet1: TClientDataSet;
DataSource1: TDataSource;
DBEdit1: TDBEdit;
ClientDataSet1ID: TIntegerField;
ClientDataSet1Value: TCurrencyField;
ListBox1: TListBox;
procedure ClientDataSet1CalcFields(DataSet: TDataSet);
procedure FormCreate(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
public
end;
[...]
procedure TForm1.ClientDataSet1CalcFields(DataSet: TDataSet);
begin
ClientDataSet1.FieldByName('Value').AsString := ListBox1.Items[ListBox1.ItemIndex];
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ListBox1.ItemIndex := 0;
ClientDataSet1.CreateDataSet;
ClientDataSet1.InsertRecord([1]);
end;
procedure TForm1.ListBox1Click(Sender: TObject);
begin
ClientDataSet1.First;
end;