主页
Top.Mail.Ru Yandeks.Metrika
论坛:“主要”;
当前存档:2002.07.29;
下载:[xml.tar.bz2];

向下

找到类似的分支


Leny   (2002-07-15 08:20) [0]

亲爱的主人! 我需要重新上传StringGrid表中的数据。 数据按行排列。
我创建了一个帖子类型
S:记录
名称:字符串;
年龄:整数;
结束;
我创建了一个流ms:= TMemoryStream.Create;
现在我需要将变量S写入流。
怎么办? 这些S可以是5 - 所以你必须发送一个循环......这可以完成吗?如何?



MBo   (2002-07-15 08:26) [1]

vS:S的数组[1..5];

ms:= TMemoryStream.Create;
为i:= 1到5开始
l:= length(vs [i] .Name);
ms.Write(l,SizeOf(l); //写入字符串长度!读取时使用SetLength
ms.Write(vs [i] .Name [1],l);
ms.Write(vs [i] .Age,SizeOf(Integer));
结束;



Leny   (2002-07-15 08:55) [2]

如果我不知道S将会是多少 - 也许是五个,也许是20 ......
那我该如何定义一个数组呢?
你可以在某种程度上没有S的vS:array [1..5];
例如,从每行中的每个单元读取数据并逐行发送?
以及如何获取这些数据并将其写回表中?




Anatoly Podgoretsky   (2002-07-15 09:02) [3]

是的,你可以挖掘动态数组的方向,
广告看起来像这个vS:S的数组;
在数组中分配空间所以Setlength(vS,StringGrid.Count);
但是根据你的任务,数组不是必需的,S的一个实例是否足够,直接从StringGrid获取数据



Lord Warlock   (2002-07-15 09:03) [4]

使用动态数组

vS:S的数组;

SetLength(vS,Grid1.RowCount)
for i:= 0 to Length(vS)-1 do
开始
...
进一步看 MBo©(15.07.02 08:26)



MBo   (2002-07-15 09:03) [5]

>从每行中的每个单元读取数据并逐行发送
是的,当然可以。
但是使用StringGrid的每一行(Rows)的Text属性更容易

var s:string;

ms:= TMemoryStream.Create;
l:= RowCount-FixedRows;
ms.Write(l,SizeOf(l); //写入行数
用StringGrid1做
for i:= FixedRows to RowCount-1确实开始
s:=行[i] .Text;
l:= length(s);
ms.Write(l,SizeOf(l); //写入字符串长度!读取时使用SetLength
ms.Write(s [1],l);
结束;





Leny   (2002-07-15 10:06) [6]

以及如何获取数据并将其写入表中?



MBo   (2002-07-15 10:13) [7]

>以及如何获取数据并将其写入表中?
我怀疑;)

如果列不同,请不要忘记列数

var s:string;

ms.read(l,SizeOf(l); //写入行数
用StringGrid2开始吧
RowCount:= l + FixedRows;
for i:= FixedRows to RowCount-1确实开始
ms.read(l,SizeOf(l));
setlength(s,l);
ms.read(s [1],l);
行[i] .Text:= s;
结束;
结束;



Leny   (2002-07-15 10:25) [8]

ms再次出现 - 全局设置?
它必须是相同的变量......



MBo   (2002-07-15 10:26) [9]

嗯,是的,只有一个流。 如果您将其释放,数据将会丢失。

什么是最初的任务? 也许你可以没有流?



Leny   (2002-07-15 10:34) [10]

任务如下。
该表包含几个文件(图形)的路径+它们的特征(大小等),您需要将这些文件(以及所有特征)发送到服务器。 同时,它们应记录在同一个表中。
即基本上将表从一台计算机复制到另一台计算机......



Leny   (2002-07-15 11:01) [11]

我有一个本地网络...所以同时,2和更多用户可以发送数据。
因此,我认为我们需要为每个人创建自己的流...
然而......当复制表时,最好将文件本身复制到另一台计算机上的特定文件夹中。



kig   (2002-07-15 11:14) [12]

在你的每个客户端(用户)发送表? 哪个服务器? 在那里的某个单独的机器上,或者由服务器,你的意思是你自己的Application Server?


我有一个本地网络...所以同时,2和更多用户可以发送数据。
因此,我认为我们需要为每个人创建自己的流...


在哪里创建? 在AppServer或?



Leny   (2002-07-15 11:40) [13]

在服务器下,我的意思是部门机器,每个人都发送他们的数据。 在此服务器上运行程序时创建线程(如果可能)。



kig   (2002-07-15 11:46) [14]


在此服务器上运行程序时创建线程(如果可能)。


是的,在服务器(机器)上的程序中,您可以执行任何操作。
对于客户来说,这是什么横向? 好吧,客户端创建了流 - 可能立即TFileStream,在那里删除表 - 一个文件出现在服务器(机器)的某个地方(好吧,一些图形文件)。
这就是我为分支的所有消息呈现整个过程的方式。

那么假设是什么? 在服务器上处理这些文件?

或者我是否误解了任务的架构?



Leny   (2002-07-15 11:53) [15]

一般来说,一切都是正确的......
此外,在服务器上,这些文件被打开并处理(如果需要),此外,处理的文件被添加到特定文件夹。



kig   (2002-07-15 12:14) [16]

好吧,在服务器(机器)上,然后挂起应用程序并按顺序处理传入文件更容易。 我们处理一个文件 - 好吧,我们在它上面启动资源(流等)。
已处理 - 看 - 仍然......好吧,等等。

您可以运行此应用程序...至少通过任务管理器(任务)。

如果使用TStringGrid对你很关键,那么看看Rows [i]属性 - 这些是TStrings,而TStrings有SaveToStream / LoadFromStream方法。
如果不是关键,您可以使用TClientDataSet或TADODataSet而不绑定到数据库(没有连接)。 两者都能够将自己保存在文件中并从中恢复。

在客户端上,DBGrid与此数据集相关联。 在数据集中,预先创建列,您需要的列(路径,大小等)顺便说一句,它会更容易 - 例如,在“大小”列中,您只能输入一个数字...



kig   (2002-07-15 12:16) [17]

...除非“大小”列有一个数字类型......
))



Leny   (2002-07-15 12:26) [18]

有一个但是......
我不需要在程序中处理该文件
我只需要复制表格! 它是一个表,而不是单独的行,因为每个表都与用户相关联。



kig   (2002-07-15 13:17) [19]

好吧,谁阻止你? 整个?
或者我没有输入什么?
因此,客户端创建了一个包含该文件的文件并将其保存在服务器上。 他的进一步命运是什么?



Случайный прохожий   (2002-07-15 16:56) [20]

它可能看起来像这样:
单位TransportGrid; 接口 使用 类,Windows,网格; 类型 TStgStrings = class(TStrings) 公开 过程StgSaveToStream(Stream:TStream); 过程StgLoadFromStream(Stream:TStream); 结束; 过程SendGrid(TransportHandle:THandle; Grid:TStringGrid); function GetGrid(TransportHandle:THandle; GridOwner:TComponent):TStringGrid; 履行 {} TStgStrings procedure TStgStrings.StgLoadFromStream(Stream:TStream); VAR 大小:整数; S:字符串; 开始 的BeginUpdate; 尝试 Stream.Read(Size,SizeOf(Size)); SetString(S,nil,Size); Stream.Read(Pointer(S)^,Size); SetTextStr(S); 最后 EndUpdate; 结束; 结束; procedure TStgStrings.StgSaveToStream(Stream:TStream); VAR S:字符串; n:整数; 开始 S:= GetTextStr; n:=长度(s); Stream.Write(n,SizeOf(n)); Stream.WriteBuffer(Pointer(S)^,n); 结束; 过程SendGrid(TransportHandle:THandle; Grid:TStringGrid); VAR MS:TMemoryStream; 行,n:红衣主教; 开始 MS:= TMemoryStream.Create; 尝试 MS.Position:= 4; 行:= Grid.ColCount; MS.Write(Rows,SizeOf(Rows)); 行:= Grid.RowCount; MS.Write(Rows,SizeOf(Rows)); 对于n:= 0到Pred(行) TStgStrings(Grid.Rows [n])。StgSaveToStream(MS); MS.Position:= 0; 行:= MS.Size-3 * SizeOf(行); MS.Write(Rows,SizeOf(Rows)); WriteFile(TransportHandle,MS.Memory ^,MS.Size,n,nil); 最后 MS.Free; 结束; 结束; function GetGrid(TransportHandle:THandle; GridOwner:TComponent):TStringGrid; VAR MS:TMemoryStream; 行,n:红衣主教; 开始 MS:= TMemoryStream.Create; 尝试 ReadFile(TransportHandle,Rows,SizeOf(Rows),n,nil); MS.Size:=行; 结果:= TStringGrid.Create(GridOwner); ReadFile(TransportHandle,Rows,SizeOf(Rows),n,nil); Result.ColCount:=行; ReadFile(TransportHandle,Rows,SizeOf(Rows),n,nil); Result.RowCount:=行; ReadFile(TransportHandle,MS.Memory ^,MS.Size,n,nil); MS.Position:= 0; 对于n:= 0到Pred(Result.RowCount)做 TStgStrings(Result.Rows [n])。StgLoadFromStream(MS); 最后 MS.Free; 结束; 结束; 结束。
测试代码:
VAR FFile:THandle; 过程TForm2.Button1Click(Sender:TObject); VAR n,m:整数; 开始 for n:= 0 to StringGrid1.RowCount-1 do for m:= 0 to StringGrid1.ColCount-1 do StringGrid1.Cells [m,n]:= IntToStr(n * StringGrid1.ColCount + m); FFile:= CreateFile(“StringGrid.grd”,GENERIC_READ或GENERIC_WRITE,0,nil,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0); SendGrid(FFile,StringGrid1); Button2.Enabled:= true; 结束; 过程TForm2.Button2Click(Sender:TObject); 开始 如果FGrd <> nil那么FGrd.Free; SetFilePointer(FFile,0,nil,FILE_BEGIN); FGrd:= GetGrid(FFile,Self); CloseHandle(FFile); Button2.Enabled:= false; 如果FGrd <>那么 开始 FGrd.Parent:=自我; 使用StringGrid1执行FGrd.SetBounds(左,上+高,宽,高); 结束; 结束;
客户端服务器的当前流量不是很理想。 但只是:)



Страницы: 1 整个分支

论坛:“主要”;
当前存档:2002.07.29;
下载:[xml.tar.bz2];

楼上









内存:0.64 MB
时间:0.032 c
3-95203
alexvan
2002-07-06 16:57
2002.07.29
如何将变量插入SQL查询


14-95512
恶魔
2002-07-02 12:59
2002.07.29
你怎么看? 有人需要这样的东西吗?


1-95397
nitro313
2002-07-16 06:09
2002.07.29
精灵! 告诉我怎么做......


1-95409

2002-07-16 10:51
2002.07.29
形式


14-95500
kserg@ukr.net
2002-07-01 10:14
2002.07.29
说,1S-boo是明智的论坛





南非荷兰语 阿尔巴尼亚人 阿拉伯语 亚美尼亚 阿塞拜疆 巴斯克 白俄罗斯 保加利亚语 加泰罗尼亚 简体中文 中国(繁体) 克罗地亚 捷克 丹麦语 荷兰人 英语 爱沙尼亚语 菲律宾人 芬兰 法文
加利亚西语 格鲁吉亚语 德语 希腊语 海地克里奥尔语 希伯来语 印地语 匈牙利 北日耳曼语 印度尼西亚人 爱尔兰语 意大利语 日本性玩偶 韩语 拉脱维亚 立陶宛 马其顿 马来语 马耳他语 挪威语
波斯语 波兰语 葡萄牙语 罗马尼亚 俄语 塞尔维亚 斯洛伐克 斯洛文尼亚 西班牙语 斯瓦希里 瑞典语 泰国人 土耳其 乌克兰 乌尔都语 越南人 威尔士语 意第绪语 孟加拉 波斯尼亚
宿务 世界语 古吉拉特语 豪萨语 苗族 伊博 爪哇 卡纳达语 高棉 老挝 拉丁语 毛利 马拉 蒙古人 尼泊尔 旁遮普 索马里 泰米尔人 泰卢固语 约鲁巴语
祖鲁
英文 Французский Немецкий Итальянский Португальский 俄文 Испанский