Mapbasic

Thảo luận trong 'Lập trình trong MapInfo' bắt đầu bởi PTP.Land, 20/5/12.

  1. PTP.Land

    PTP.Land New Member

    Tham gia ngày:
    25/4/12
    Bài viết:
    142
    Đã được thích:
    0
    Điểm thành tích:
    0
    Chào cả nhà!
    Em đang gặp một vấn đề khi sử dụng Mapbasic để tạo ra một công cụ hỗ trợ trên Mapinfo, công cụ này gồm vài chức năng nhỏ trong đó có việc tính tổng diện tích theo từng mục đích sử dụng đất. Trong đó, làm thế nào để có thể nhận dạng được trong các Table được mở thì Table nào được sử dụng để tính toán (em chưa hiểu cách viết câu lệnh này), còn câu lệnh để thực hiện tính tổng diện tích thì em đã hiểu. Mong cả nhà chỉ giúp em vấn đề này.
    Em cảm ơn cả nhà nhiều...!!!
     
    Tags:
  2. pashoang

    pashoang New Member

    Tham gia ngày:
    28/3/12
    Bài viết:
    10
    Đã được thích:
    0
    Điểm thành tích:
    0
    Bạn phải code để lấy list các table đang mở (nhớ loại bỏ các tab temporary đi) xong rùi dùng vòng lặp làm việc với twngf tab 1, làm việc với tab nào thì print hoặc note nó ra để kiếm soát.
    Có lỗi gì thì pót lên đây mọi ng sẽ giúp đỡ :)
     
  3. PTP.Land

    PTP.Land New Member

    Tham gia ngày:
    25/4/12
    Bài viết:
    142
    Đã được thích:
    0
    Điểm thành tích:
    0
    Em vẫn chưa hiểu lắm, a có thể nói rõ hơn một tí được không hay a có thể đặt ra giả thuyết rồi viết câu lệnh đó giúp em được không? Em bị lỗi ngay vị trí đó nên khi dịch chương trình cứ báo lỗi hoài. Em cảm ơn nhiều...!!!
     
  4. GEOMITECH

    GEOMITECH Moderator

    Tham gia ngày:
    31/10/11
    Bài viết:
    791
    Đã được thích:
    9
    Điểm thành tích:
    18
    Nghề nghiệp:
    GEOLOGIST
    Nơi ở:
    Hà Nội
    Cái này bạn chú ý đén cách phân loại Table chứa data mình cần sử dụng. Key có thể là Cấu trúc của Table, Tên Table, ..... cái này là do bạn quy định mà. Bạn nên xây dựng hàm kiểm tra các thông số cần có để tính toán theo cách thức của em.

     
  5. PTP.Land

    PTP.Land New Member

    Tham gia ngày:
    25/4/12
    Bài viết:
    142
    Đã được thích:
    0
    Điểm thành tích:
    0
    Đọc hướng dẫn của Anh, em đã có một chút liên tưởng đến cách viết. Em sẽ đọc thêm giáo trình kết hợp với lời hướng dẫn của Anh , hi vọng em sẽ làm được điều em muốn. Có gì rắc rối mong Anh hướng dẫn giúp em.
    Cảm ơn Anh nhiều...!!!
     
  6. PTP.Land

    PTP.Land New Member

    Tham gia ngày:
    25/4/12
    Bài viết:
    142
    Đã được thích:
    0
    Điểm thành tích:
    0
    Chào Anh GEOMITECH và các Anh chị diễn đàn!
    Em có vấn đề này mong các anh chị giúp em. Hôm trước em có hỏi về vấn đề viết câu lệnh để lựa chọn 1 trong các Table được mở để xử lý. Khi dịch thì không báo lỗi nhưng khi chạy thì lại báo lỗi. Anh chị xem giúp em đoạn chương trình sau xem bị lỗi gì giúp em nha.

    Include "MAPBASIC.DEF"
    Include "MENU.DEF"

    Declare Sub Main()
    Declare Sub EndApp()
    Declare Sub Xuat
    Declare Function OpenTabs$() As String
    '=============================
    Sub Main()
    Create Menu "&XuÊt d÷ liÖu" As
    "&XuÊt d÷ liÖu ra dbf" Calling Xuat,
    "(-",
    "&Tho¸t ch*¬ng tr×nh" Calling EndApp

    Alter Menu Bar Add "XuÊt d÷ liÖu"
    End Sub
    '=============================
    Sub EndApp()
    Alter Menu Bar Remove "XuÊt d÷ liÖu"
    Terminate Application "Congcu.mbx"
    End Sub
    '=============================
    Sub Xuat
    Dim i, iTabNum As SmallInt
    Dim sTabList, sTabName As String
    If NumTables() = 0 then
    Note "B¹n ch*a më líp d÷ liÖu nµo c¶.Xin vui lßng më Ýt nhÊt mét líp d÷ liÖu...!!!"
    Exit Sub
    Else
    sTabList = OpenTabs$()
    Dialog title "Chän líp d÷ liÖu" width 205
    Control StaticText Position 8,12 Title "Chän líp d÷ liÖu cÇn xö lý:"
    Control PopupMenu Position 95,10 Title sTabList Into iTabNum Width 100
    Control OKButton Title "Chän"
    Control CancelButton Title "Kh«ng"
    End If
    Export sTabname Into "E:\" Type "DBF" Charset "WindowsLatin1" (Em nghỉ có thể sẽ gặp vấn đề chổ này nhưng không biết sửa ra sao)
    End Sub
    '=============================
    Function OpenTabs$() As String
    Dim i as SmallInt
    Dim sTableList As String
    For i = 1 to NumTables()
    sTableList = sTableList + TableInfo(i,TAB_INFO_NAME) + ";"
    Next
    OpenTabs$ = sTableList
    End Function

    Em cảm ơn nhiều!
     
  7. Cu Tit

    Cu Tit New Member

    Tham gia ngày:
    25/10/11
    Bài viết:
    50
    Đã được thích:
    0
    Điểm thành tích:
    0
    Nghề nghiệp:
    Rong chơi
    Nơi ở:
    Gia lai
    Phải có cậu lệnh để gán tên table đã chọn cho biến sTabname
    Biến sTabname phải có kiểu Alias, kiểu String không được (hình như thế, để kiểm tra lại)

    Control PopupMenu Position 95,10 Title From Variable sTabList
    Value 1
    Into sTabname
    Width 100

    Sau đó bạn sửa như sau: Export sTabname Into "E:\file_name" Type "DBF" Charset "WindowsLatin1"
    Bạn phải chọn cụ thể tên file kết quả export

    ---------- Post added at 03:43 PM ---------- Previous post was at 03:42 PM ----------
     
    Last edited by a moderator: 28/5/12
  8. PTP.Land

    PTP.Land New Member

    Tham gia ngày:
    25/4/12
    Bài viết:
    142
    Đã được thích:
    0
    Điểm thành tích:
    0
    Mình sửa lại như bạn hướng dẫn nhưng vẫn không được bạn ơi.
     
  9. Cu Tit

    Cu Tit New Member

    Tham gia ngày:
    25/10/11
    Bài viết:
    50
    Đã được thích:
    0
    Điểm thành tích:
    0
    Nghề nghiệp:
    Rong chơi
    Nơi ở:
    Gia lai
    Khi chạy chương trình, Biến sTabname đang có giá trị số (1, 2,..) chính là số thứ tự của table bạn chọn trong hộp ComboBox, chứ không phải tên table bạn cần export
    Như vậy bạn cần lập thêm 1 hàm (Function) để chuyển giá trị số thứ tự sang tên table cần export
    Mình đã sửa toàn bộ trương trình của bạn như sau:

    Include "MAPBASIC.DEF"
    Include "MENU.DEF"
    Declare Sub Main()
    Declare Sub EndApp()
    Declare Sub Xuat
    Declare Function OpenTabs$() As String
    Declare Function GetListString$(ByVal inlist as String, ByVal choice as SmallInt) as String
    '=============================
    Sub Main()
    Create Menu "&XuÊt d÷ liÖu" As
    "&XuÊt d÷ liÖu ra dbf" Calling Xuat,
    "(-",
    "&Tho¸t ch*¬ng tr×nh" Calling EndApp


    Alter Menu Bar Add "XuÊt d÷ liÖu"
    End Sub
    '=============================
    Sub EndApp()
    Alter Menu Bar Remove "XuÊt d÷ liÖu"
    Terminate Application "Congcu.mbx"
    End Sub
    '=============================
    Sub Xuat
    Dim i, k, iTabNum As SmallInt
    Dim sTabList, sTabName As String
    'Dim sTabName As Alias
    If NumTables() = 0 then
    Note "B¹n ch*a më líp d÷ liÖu nµo c¶.Xin vui lßng më Ýt nhÊt mét líp d÷ liÖu...!!!"
    Exit Sub
    End If
    sTabList = OpenTabs$()
    Dialog title "Chän líp d÷ liÖu" width 205
    Control StaticText Position 8,12 Title "Chän líp d÷ liÖu cÇn xö lý:"


    Control PopupMenu Position 95,10
    Title From Variable sTabList
    Value 1
    Into k
    Width 100


    Control OKButton 'Title "Chän"
    Control CancelButton 'Title "Kh«ng"


    If CommandInfo(CMD_INFO_DLG_OK) Then
    sTabname = GetListString$(sTabList,k)
    Export sTabname
    Into "file_name" Type "DBF" Charset "WindowsLatin1"
    End If
    End Sub
    '=============================
    Function OpenTabs$() As String
    Dim i as SmallInt
    Dim sTableList As String
    For i = 1 to NumTables()
    sTableList = sTableList + TableInfo(i,TAB_INFO_NAME) + ";"
    Next
    OpenTabs$ = sTableList
    End Function
    '======================
    Function GetListString$(ByVal inlist as String, ByVal choice as SmallInt) as String'-------------

    Dim i, iIndex1, iIndex2 as SmallInt


    iIndex2 = 0
    i = 1
    While i <= choice
    iIndex1 = iIndex2+1
    iIndex2 = instr(iIndex1,inlist,";")
    If iIndex2 = 0 Then
    GetListString$ = right$(inlist,len(inlist)-iIndex1+1)
    Else
    GetListString$ = mid$(inlist,iIndex1,iIndex2-iIndex1)
    End If
    i = i + 1
    Wend
    End Function
     
  10. PTP.Land

    PTP.Land New Member

    Tham gia ngày:
    25/4/12
    Bài viết:
    142
    Đã được thích:
    0
    Điểm thành tích:
    0
    Đúng rồi đó bạn, Mình đã làm được rồi.
    Cảm ơn bạn nhiều nha đã nhiệt tình giúp đở mình!
     
    Last edited by a moderator: 29/5/12
  11. GEOMITECH

    GEOMITECH Moderator

    Tham gia ngày:
    31/10/11
    Bài viết:
    791
    Đã được thích:
    9
    Điểm thành tích:
    18
    Nghề nghiệp:
    GEOLOGIST
    Nơi ở:
    Hà Nội
    Bạn chú ý nha, khi cần cảm ơn ai thay vì nói "Cảm ơn" bạn hãy nhấn nút "Cảm ơn" bên góc trái nhé!

     
  12. minhvuql

    minhvuql Member

    Tham gia ngày:
    21/10/11
    Bài viết:
    334
    Đã được thích:
    2
    Điểm thành tích:
    18
    Nơi ở:
    Địa phủ
    Viết cái chưa có thì viết chứ ba cái này mà cũng viết cứ dùng SQL Select mà làm, thiệt là botay
     
  13. PTP.Land

    PTP.Land New Member

    Tham gia ngày:
    25/4/12
    Bài viết:
    142
    Đã được thích:
    0
    Điểm thành tích:
    0
    Cảm ơn bạn minhvuql đã góp ý. Do mình mới tập tành học Mapbasic nên mình bắt đầu học những câu lệnh đơn giản như vậy. Mình chưa làm được những câu lệnh phức tạp để tạo ra các công cụ mới, mình sẽ cố gắng tìm hiểu một ngày nào đó mình sẽ tạo ra các công cụ mới để chia với Anh Chị Em của diễn đàn. Chắc bạn minhvuql cũng là cao thủ Mapbasic có gì mong bạn chỉ giáo thêm, chắc bạn đã tạo nhiều công cụ có thể chia sẽ cho Anh Em trên diễn đàn cùng học tập.
     
  14. minhvuql

    minhvuql Member

    Tham gia ngày:
    21/10/11
    Bài viết:
    334
    Đã được thích:
    2
    Điểm thành tích:
    18
    Nơi ở:
    Địa phủ
    Có gì cứ nêu vấn đề, anh sẽ đưa ra thuật toán cho em viết luôn khỏi suy nghĩ cho mệt.
    ----------------------------------------------------------------------------------------------------
    [​IMG]
     
    Last edited by a moderator: 13/8/12
  15. PTP.Land

    PTP.Land New Member

    Tham gia ngày:
    25/4/12
    Bài viết:
    142
    Đã được thích:
    0
    Điểm thành tích:
    0
    Mình có vấn đề nhỏ như thế này: Sau khi truy vấn dữ liệu trên Mapinfo được một bảng kết quả thống kê diện tích theo từng mục đích sử dụng, theo từng đối tượng sử dụng. Sau đó cập nhật một các tự động vào Hệ thống biếu: Hệ thống biểu Thống kê, Kiểm kê đất đai (Dạng Excel) theo quy định Thông tư 08/2007/TT-BTNMT hoặc Hệ thống biểu Quy hoạch theo quy định của Thông tư 30/2004/TT-BTNMT(cũ) và Thông tư 19/2009/TT-BTNMT (mới) một cách tự động khoảng 5 giây là sẽ có được toàn bộ Hệ thống biểu. Anh Vu chỉ giúp em thuật toán để viết chức năng này nha anh.
     
  16. minhvuql

    minhvuql Member

    Tham gia ngày:
    21/10/11
    Bài viết:
    334
    Đã được thích:
    2
    Điểm thành tích:
    18
    Nơi ở:
    Địa phủ
    Cái này để anh viết rồi đưa cho em chứ thuật toán chắc không đưa được đâu em, chất xám không đó em, cái gì đơn giản thì được chứ cái này thì anh không đưa code được, em thông cảm nhé, thời đại thị trường mà, edit lung tung.
     
  17. PTP.Land

    PTP.Land New Member

    Tham gia ngày:
    25/4/12
    Bài viết:
    142
    Đã được thích:
    0
    Điểm thành tích:
    0
    Cảm ơn Anh Vủ trước nha!
    Vậy anh làm đi hén. Khi nào có thì Anh đưa sản phẩm lên diễn đàn chia sẽ cho Anh Em trên diễn đàn cùng sử dụng nha Anh. Còn Code thì cứ để lại em hiểu điều đó.
     
  18. minhvuql

    minhvuql Member

    Tham gia ngày:
    21/10/11
    Bài viết:
    334
    Đã được thích:
    2
    Điểm thành tích:
    18
    Nơi ở:
    Địa phủ
    Nếu em có khoảng phí nho nho anh có thể share em code cũng được, không thành vấn đề
    Công nghệ thế giới phát triển quá rồi anh cũng không giữ làm gì.
     
  19. PTP.Land

    PTP.Land New Member

    Tham gia ngày:
    25/4/12
    Bài viết:
    142
    Đã được thích:
    0
    Điểm thành tích:
    0
    Code thì em không lấy đâu. Nếu anh có thể thì viết và đưa lên diễn đàn cho Anh Em cùng sử dụng thì quá tốt. Thầy Tuấn (BQT) có đăng một bài khuyến khích các thành viên tạo ra có tool để chia sẽ cho thành viên GISVN cùng sử dụng. Anh có thể viết và đưa lên thì họp với nội dụng của Thầy đó Anh.Vấn đề em nêu ra ở trên cũng chính là công cụ mà em muốn làm để chia sẽ với Anh Em diễn đàn. Em cũng đang trong giai đoạn tiến hành làm. Càng nhiều công cụ thì càng tốt đó anh. Em cũng muốn góp một phần nhỏ của mình vào GISVN. Tất cả vì mục đích như Thầy Tuấn, Anh Châu và Các Anh em diễn đàn cùng hướng tới " Vì sự phát triển của cộng đồng GIS Việt".
     
  20. minhvuql

    minhvuql Member

    Tham gia ngày:
    21/10/11
    Bài viết:
    334
    Đã được thích:
    2
    Điểm thành tích:
    18
    Nơi ở:
    Địa phủ
    Cái nèy chắc còn phải suy nghĩ lại ak, không dễ đâu nha. ;))
     

Chia sẻ trang này

Share
Đang tải...