将tcp数据保存到表数据库中
我正在使用 VCL TCPServer 组件,每次有数据时它都会触发事件 在 TCP 端口上收到。在事件数据中可用文本形式 程序的参数。因为我想把这些数据保存到mysql中 我想知道解决这个问题的最佳方法是什么。 直接在过程中对收到的每个数据使用 INSERT SQL 命令 或将数据存储在内存中(即TStrings)然后调用 函数每隔 X(使用计时器)分钟执行 INSERT 命令?
谢谢
I am using a VCL TCPServer components which fires events everytime a data is
received on a tcp port. Within the event data is available into text
parameter of the procedure. Because I want to save this data into mysql
database I am wondering which is the best approach to this problem.
Directly use an INSERT SQL command within the procedure for every data received
or store the data in a memory (i.e. TStrings) and then calling
a function every X (using Timer) minutes excute the INSERT command?
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
好吧,
您不应该将数据保存在事件中,因为这样做会破坏组件执行流程。相反:
1 - 您可以缓冲要保存的所有数据,并且时不时地保存它们(不好,如果您的应用程序发生问题,您可能会丢失大量数据)。
2 - 在事件内部,创建一个线程来接收数据并将其保存到数据库中。这样,您就不会中断事件流的执行,并且可以动态保存所有数据。如果您这样做,您还将多使用一个 CPU 核心。这就是我要做的。
解决方案 2 的代码(未经测试):
如果您不知道线程,请查看以下内容:多线程 - Delphi 方式
Well,
You should not save your data inside the event, because you are breaking the component execution flow when you do that. Instead:
1 - You can buffer all data you want to save, and from time to time you save them (not good, you can lost a lot of data if something happens with your app).
2 - Inside the event, create a thread that will receive the data and save them to the database. This way you are not breaking the event flow execution and you will have all data saved on the fly. Also you will be using one more core of your CPU if you do so. That is what i would do.
Code for solution 2 (untested):
Check this out if you dont know threads: Multithreading - The Delphi Way