Bài viết hướng dẫn sử dụng lập trình để làm việc với Etabs nhằm giải quyết các bài toán liên quan.
Đối với lập trình thiết kế kết cấu, việc đọc dữ liệu từ Etabs là một vấn đề tương đối cần thiết, bới chúng ta thường phải dựa vào Etabs để giải quyết các vấn đề sau:
- Tính toán các tải trọng Gió và Động đất (dựa vào dữ liệu về các dạng dao động)
- Tính toán móng (dựa vào phản lực chân cột)
- Tính toán diện tích cốt thép Dầm, Cột (dựa vào nội lực)
- Xuất bảng kiểm tra các điều kiện chuyển vị như chuyển vị đỉnh nhà, chuyển vị lệch tầng ...
Một phương thức chủ yếu để đọc dữ liệu từ Etabs là thông qua file *.mdb được xuất ra từ Etabs. Đây là một cơ sở dữ liệu chứa đựng hầu hết thông tin về mô hình của Etabs chỉ duy nhất trong 1 file.
Với tiền đề đó, mình tiến hành các bài viết hướng dẫn về việc đọc dữ liệu từ Etabs thông qua file *.mdb
Cơ cấu đọc dữ liệu tương đối đơn giản. Tuy nhiên với lượng dữ liệu khổng lồ, việc quản lý và sử dụng dữ liệu như thế nào mới là vấn đề cần đến kỹ thuật khéo léo của người lập trình.
Bài viết dựa trên ví dụ có thể download tại đây:
- Ví dụ từ mục I đến VI: link download
- Ví dụ mụ VII: link download
I. CÁC THIẾT LẬP CẦN THIẾT CHO VB
Để hoạt động được với file *.mdb, VB .NET cần có các thiết lập như sau:
I.1. Chuyển phần mềm sang chế độ 32 bit, thiết lập được tiến hành trong mục Project > [tên project] Properties ... > Compile > Advanced Compile Options > Taget CPU
I.2. Tham chiếu đến thư viện System.Data.OleDb
II. CHUẨN BỊ DỮ LIỆU
Dữ liệu trong Etabs xuất ra dưới dạng file *.mdb, được lưu dưới tên vidu.mdb, có địa chỉ nằm trong thư mục Debug của phần mềm (cùng thư mục với file *.exe của chúng ta)
Xin nói qua 1 chút về dữ liệu
Mở file bằng phần mềm Microsoft Access để thấy cấu trúc của dữ liệu.
Dữ liệu được trình bày thành các bảng với tên tương ứng, chúng ta có thể thấy danh sách các bảng trong cột bên trái.
Truy cập bảng Story Data, chúng ta sẽ thấy bảng này gồm 4 cột với các nội dung sau: cột 1 - Story - chứa tên của tầng, cột 2 - Height - chứa thông tin về chiều cao tầng, cột 3 - Elevation - chứa thông tin về cao độ của tầng, cột 4 - similarTo - chứa thông tin về quan hệ giữa các tầng điển hình
Bảng Story Data có 18 dòng dữ liệu (không kể dòng trống cuối cùng) tương ứng với thông tin về 17 tầng và thông tin về tầng Base
Hãy hình dung về cách truy cập dữ liệu của chúng ta khi sử dụng VB .NET, chúng ta sẽ tuy cập dữ liệu theo trình tự sau:
- Mở file
- Truy cập vào bảng Story Data
- Truy cập vào các dòng (biến row), tương ứng là dữ liệu của 1 tầng. Chú ý là thứ tự các dòng bắt đầu từ 0
- Tại mỗi dòng, truy cập vào các cột để lấy thông tin của tầng. Chú ý là thứ tự các cột bắt đầu từ 0.
Ví dụ, muốn đọc thông tin về tên tầng của dòng thứ 5, chúng ta dùng cú pháp sau:
Ten_Tang = DS.Tables("Story Data").Rows(4).Item(0)
trong đoạn code trên,
- DS.Tables("Story Data") là bảng Story Data
- Rows(4) là dòng thứ 5 của bảng, dòng này có số thứ tự bằng 4
- Item(0) là cột thứ 1 của dòng (cột Story), có số thứ tự bằng 0
III. XÂY DỰNG GIAO DIỆN VÀ CÁC MODUL
Chúng ta xây dựng phần mềm gồm có 1 form với tên frmMain và 1 modul với tên molMain
Giao diện của frmMain bao gồm:
- 2 nút lệnh: Đọc 1 dòng có tên butDocMotDong, Đọc cả bảng có tên butDocCaBang
- 1 Listbox có tên lstStory
IV. NỘI DUNG CỦA molMAIN
Trong molMain, chúng ta xây dựng một kiểu dữ liệu mới chứa thông tin về các tầng, bằng cách sử dụng cấu trúc Structure tại dòng thứ 2. Kiểu dữ liệu các tầng sẽ có tên Story_Info, chứa đựng 2 thông tin là A_Lable để lưu tên tầng và B_Elevation để lưu cao độ của tầng.
Tại dòng số 7 chúng ta khai báo mảng 1 chiều Story_List chứa thông tin về các tầng, ban đầu chưa có số lượng phần tử, mảng có kiểu Story_Info
Tại dòng số 8 chúng ta khai báo biến Story_Num chứa thông tin về số lượng tầng
Từ dòng số 10 đến dòng 16, chúng ta chuẩn bị 1 hàm để lấy thông tin về đường dẫn tới file *.exe phần mềm của chúng ta, do file *.mdb cũng nằm trong thư mục này nên đấy cũng chính là đường dẫn của file *.mdb
V. ĐỌC DỮ LIỆU 1 DÒNG
Viết CODE cho nút lệnh butDocMotDong
Dòng 4, 5, 6 có nhiệm vụ khai báo các biến liên quan đến đọc dữ liệu
Dòng 8 - khai báo biến chứa đường dẫn đầy đủ của file *.mdb
Dòng 10, 11 có nhiệm vụ mở file vidu.mdb
Dòng 12, 13 có nhiệm vụ truy cập vào bảng Story Data
Dòng 15 truy cập dữ liệu về tên tầng của dòng thứ 5 (có index là 4) của bảng Story Data và hiện lên thông báo thông qua cú pháp Msgbox()
Dòng 17 có nhiệm vụ đóng cơ sở dữ liệu
Chạy phần mềm và click vào nút lệnh Đọc 1 dòng, kết quả như sau:
VI. ĐỌC DỮ LIỆU CẢ BẢNG
Viết CODE cho nút lệnh butDocCaBang
Từ dòng 21 đến 30, các dòng lệnh tương tự như với phần Đọc 1 dòng
Dòng 32 - lấy số lượng tầng, tuy nhiên chúng ta sẽ bỏ đi dòng Base nên số lượng này bằng số dòng trong bảng trừ đi 1.
Dòng 34 - khai báo số lượng phần tử cho mảng Story_List
Dòng 35 đến 38 - thực hiện vòng lặp For - Next để lần lượt đọc các dòng trong bảng
Dòng 39 - đóng cơ sở dữ liệu
Dòng 41 đến 43 - thể hiện danh sách tên các tầng vào hộp danh sách lstStory
Chạy phần mềm và click vào nút lệnh Đọc cả bảng, kết quả như sau:
VII. LỌC DỮ LIỆU
Giả sử đã có một bảng gán cho biến DT, bảng này có khá nhiều dòng, tuy nhiên chúng ta chỉ muốn lấy dữ liệu tại một số dòng thỏa mãn điều kiện so sánh, các dòng này sẽ được gán cho biến myRow, cú pháp của lệnh lọc sẽ là:
myRow = DT.Select(Điều_kiện)
Điều kiện ở đây chính là giá trị của một cột nào đó (được gọi bằng tên của cột trong bảng) bằng giá trị định trước của chúng ta.
- Điều kiện có thể là điều kiện đơn, ví dụ Story= 'TANG11', ở đây Story chính là tên của cột trong bảng, TANG11 chính là tên của tầng, sau khi lọc chúng ta sẽ có thông tin của duy nhất TANG11 được gán cho biến myRow
- Điều kiện cũng có thể là tập hợp các điều kiện, ví dụ khi ta truy cập bảng Buiding Modes, điều kiện Story= 'TANG11' and Mode= '1' sẽ cho cho chúng ta thông tin về biên độ (thể hiện dạng dao động) của TANG11 tại dạng dao động Mode 1
Ở ví vụ này, chúng ta sẽ bổ sung chức năng đọc thông tin về khối lượng tham gia dao động của 1 tầng cụ thể bằng thao tác lọc dữ liệu. Có thể mô tả quá trình này như sau: khi chúng ta click chọn tầng trong hộp lstStory (sự kiện lstStory_SelectedIndexChanged), chúng ta sẽ truy cập bảng Center Mass Rigidity, lọc bảng này với điều kiện Tên tầng = Tên tầng được chọn trong hộp lstStory, lấy thông tin về khối lượng dao động MassX của tầng và hiển thị ở textbox txtMassX
- Dòng 47: Để tránh lỗi nếu hộp lstStory không có dòng nào
- Dòng 48: Lấy tên tầng được chọn
- Dòng 50 đến 61: Khai báo các biến liên quan, mở file và truy cập bảng Center Mass Rigidity
- Dòng 62: Gán bảng cho biến DT
- Dòng 64: Xác định điều kiện lọc
- Dòng 65: Thực hiện lọc. Đối với trường hợp của ví dụ này, sau khi lọc, thực chất biến myRow chỉ có duy nhất 1 dòng (chỉ 1 dòng thỏa mãn điều kiện lọc)
- Dòng 66: Đọc cột có tên MassX (có index = 2), hiển thị ở hộp txtMassX
Chạy ví dụ, click nút lệnh Đọc cả bảng, click vào hộp lstStory, kết quả như sau: