2010-01-12 28 views
5

Tôi đã tạo một ứng dụng nhỏ kết nối với db db mysql bằng dbx. Nó hoạt động ok với máy chủ mysql cục bộ của tôi, nhưng nó phải làm việc với một máy chủ từ xa.Phân tách kết nối dbx cho một chủ đề

Kết nối với máy chủ từ xa mất vài giây, ứng dụng này sẽ đóng băng ứng dụng.

Vì vậy, câu hỏi của tôi là, làm thế nào tôi có thể đặt mã kết nối trong một luồng khác?

Tôi sẽ phải chuyển kết nối đó tới luồng chính bằng cách nào đó, sao cho dbgrid tôi có trên biểu mẫu chính hoạt động.

Tôi đọc rằng công cụ db hoạt động trong một luồng khác phải có kết nối riêng. Vì vậy, tôi không chắc chắn làm thế nào để làm những gì tôi muốn.

Bất kỳ ý tưởng nào? Bất cứ điều gì để đọc về làm việc với các máy chủ từ xa?

Cảm ơn.

Chỉnh sửa: Các thành phần tôi đang sử dụng trên biểu mẫu là: TSQLConnection -> TSimpleDataSet> TDataSource> TDBGrid.

+0

Người dùng có thể tương tác với chương trình của bạn một cách hữu ích trong khi đợi kết nối thiết lập không? –

+0

Vâng, không thực sự, có lẽ nên có một nút "Hủy bỏ", nhưng không có. Tôi chỉ muốn nó hiển thị thông báo "kết nối" mà không bị đóng băng ứng dụng. – Mario

Trả lời

0

này đã thực sự giúp tôi để làm Apps đa chủ đề trong studio rad Writing multi-threaded applications Index

nếu họ là bất cứ điều gì bài khác và bệnh cố gắng để giúp

+0

Tôi đã đọc phần đó của trợ giúp, nhưng tôi vẫn không chắc chắn cách thực hiện kết nối dbx trong một chuỗi riêng biệt và chia sẻ nó với chuỗi chính. – Mario

1

Bạn chỉ cần một kết nối cho mỗi thread nếu chủ đề của bạn là sẽ thực hiện truy cập cơ sở dữ liệu đồng thời. Về cơ bản những gì bạn muốn, là cho một sợi để kết nối, và trở lại với bạn khi kết nối đã được thiết lập. Bạn có thể làm điều này trong một chủ đề và khi chuỗi đã sẵn sàng (tức là kết nối được thiết lập), nó có thể gửi một thông điệp trở lại luồng chính để cho biết rằng kết nối dbx hiện đã có sẵn. Xem hướng dẫn này để biết các ý tưởng về cách thiết lập luồng và giao tiếp giữa luồng và chuỗi VCL chính. Threading Tutorial

+0

+1 Có, các tài nguyên như kết nối mạng có thể không đồng bộ trong các ứng dụng đa luồng. Tương tự áp dụng cho các kết nối FTP, con trỏ tập tin, vv Vì vậy, việc tạo một tài nguyên riêng cho mỗi luồng là cách để đi. –

Các vấn đề liên quan