Một mạng lưới trỏ là trống nếu lệnh SQL chọn lại con trỏ trong Visual FoxPro


Triệu chứng


Trong Microsoft Visual FoxPro, nếu thuộc tính RecordSource lưới được đặt con trỏ và sau đó chọn SQL lệnh đặt lại con trỏ lưới xuất hiện trống nếu các
RecordSource thuộc tính không được đặt lại chính nó.


Lệnh sẽ làm mới lưới đúng nếu chọn SQL chạy lại con trỏ, nhưng nếu thuộc tính cột hoặc tiêu đề của mạng lưới đã được tuỳ chỉnh, các thay đổi tuỳ chỉnh sẽ bị mất và thuộc tính cột và tiêu đề của lưới sẽ thay đổi Quay lại các thiết đặt mặc định:
   THISFORM.GRID1.RECORDSOURCE=THISFORM.GRID1.RECORDSOURCE
Tuỳ chỉnh có thể tiêu đề với tên khác nhau, còn chiều dài cột và mã được đặt trong sự kiện hoặc tiêu đề cột. Để biết thêm thông tin, hãy xem bài viết sau trong cơ sở kiến thức Microsoft:
131836 PRB: lưới không làm hiển thị con trỏ từ truy vấn

Nguyên nhân


Khi bạn xây dựng lại con trỏ lưới dựa trên lệnh SELECT SQL, trỏ gốc đã bị phá hủy trước khi con trỏ mới có thể được tạo ra. Khi điều này xảy ra, lưới cột và tiêu đề cũng bị xoá và sau đó tạo lại. Ngay cả khi nhà RecordSource lưới được đặt lại chính nó, cài đặt tuỳ chỉnh cột và tiêu đề lưới sẽ bị mất.

Giải pháp


Để làm mới lưới mà không mất các thuộc tính tuỳ chỉnh cột và tiêu đề, đặt RecordSource sở hữu một con trỏ giả đã được tạo ra với các lĩnh vực tương tự như con trỏ lưới dựa trên. Sau khi chọn SQL chạy, thay đổi RecordSource thuộc về con trỏ xây dựng lại. Điều này cho phép các thuộc tính của cột và tiêu đề vẫn giữ nguyên trong khi con trỏ đang được xây dựng lại.

Trạng thái


Hoạt động này là theo thiết kế.

Thông tin


Các bước để tái tạo hiện tượng

  1. Mở bảng Customer.dbf nằm trong thư mục \Vfp\Samples\Data và tạo một mẫu được gọi là GridForm.
  2. Đặt mã sau trong trường hợp tải biểu mẫu:
       SELECT cust_id, city, country FROM customer INTO CURSOR Temp1
    SELECT cust_id, city, country FROM customer WHERE country = "" ;
    INTO CURSOR Temp2
  3. Đặt mã sau trong trường hợp Destroy biểu mẫu:
       SELECT Temp1
    USE
    SELECT Temp2
    USE
  4. Đặt lưới trên biểu mẫu và cung cấp cho lưới thiết đặt thuộc tính sau:
       ColumnCount=3
    RecordSourceType=Alias
    RecordSource=Temp1
  5. Thay đổi tiêu đề của grid1. Column1.header1 Id khách hàng và nhà Column1 chiều rộng đến 100.
  6. Thêm một hộp văn bản biểu mẫu.
  7. Thêm một nút lệnh và đặt mã sau trong sự kiện bấm:
       THISFORM.GRID1.RECORDSOURCE = "Temp2"
    SELECT cust_id, city, country FROM customer ;
    WHERE country = Thisform.text1.value ;
    INTO CURSOR Temp1
    THISFORM.GRID1.RECORDSOURCE = "Temp1"
  8. Chạy các mẫu. Nhập Tây Ban Nha vào hộp văn bản, và sau đó bấm vào nút lệnh. Lưới sẽ hiển thị tất cả hồ sơ trường quốc gia đâu bằng Tây Ban Nha. Chú ý tên tiêu đề cột 1 vẫn giống nhau và chiều rộng của cột không thay đổi. Bằng cách thay đổi RecordSource lưới con trỏ được gọi là Temp2, thuộc tính cột và tiêu đề không được đặt lại khi con trỏ Temp1 được xây dựng lại.
  9. Thay đổi THISFORM hai. GRID1. RECORDSOURCE dòng sự kiện bấm lệnh nút vào ý kiến và thêm sau là dòng cuối cùng của mã:
       THISFORM.GRID1.RECORDSOURCE = THISFORM.GRID1.RECORDSOURCE
    Sau khi chạy biểu mẫu, nhập tên quốc gia trong hộp văn bản và nhấp vào nút lệnh, lưu ý rằng thay đổi tên cột và chiều rộng nhỏ hơn.