DIỄN ĐÀN NGÀNH TIN HỌC XÂY DỰNG_ĐẠI HỌC XÂY DỰNG

Building A Better World


    Trao đổi cách nhập xuất dữ liệu từ file text và excel trong VB6

    Share
    avatar
    knet1304
    Admin
    Admin

    Tổng số bài gửi : 670
    Points : 1933
    Join date : 16/01/2011
    Age : 27
    Đến từ : Khoa CNTT-Trường Đại học Xây Dựng

    Trao đổi cách nhập xuất dữ liệu từ file text và excel trong VB6

    Bài gửi by knet1304 on 05.09.11 21:32

    Với file text:

    Đoạn mã đọc dữ liệu từ file text:

    Code:
    Private Sub DocText_click()
    f = FreeFile
    Open App.Path & "\\ThongTinSV.txt" For Input As f
    Line Input #f, s
    a = Split(s, ":")
    txtHo.Text = Trim(a(1))

    Line Input #f, s
    a = Split(s, ":")
    txtTen.Text = Trim(a(1))

    Line Input #f, s
    a = Split(s, ":")
    cboNgay.Value = Trim(a(1))
    Line Input #f, s
    a = Split(s, ":")
    txtNoiSinh.Text = Trim(a(1))

    Line Input #f, s
    a = Split(s, ":")
    txtDanToc.Text = Trim(a(1))

    Line Input #f, s
    a = Split(s, ":")
    txtTonGiao.Text = Trim(a(1))

    Line Input #f, s
    a = Split(s, ":")
    txtDiaChi.Text = Trim(a(1))

    Line Input #f, s
    a = Split(s, ":")
    txtDThoai.Text = Trim(a(1))

    Line Input #f, s
    a = Split(s, ":")
    txtEmail.Text = Trim(a(1))

    'Gioi tinh
    Line Input #f, s
    a = Split(s, ":")
    If a(1) = "Nam" Then
    OpNam.Value = True
    OpNu.Value = False
    End If
    If a(1) = "Nu" Then
    OpNam.Value = False
    OpNu.Value = True
    End If

    'Ngoaingu - Tim chuoi trong chuoi
    Line Input #f, s
    If InStr(s, "Anh") <> 0 Then ChkAnh.Value = 1
    If InStr(s, "Phap") <> 0 Then ChkPhap.Value = 1
    If InStr(s, "Nga") <> 0 Then ChkNga.Value = 1
    If InStr(s, "Hoa") <> 0 Then ChkHoa.Value = 1
    Close f

    End Sub
    Trong phấn ghi dữ liệu ngoại ngữ có sử sụng hàm InStr Sử dụng hàm này ta không cần phải cắt chuổi s mà chỉ dò tìm trong chuồi.Hàm InStr(..) sẽ trả về giá trị khi dò tìm so sánh. Nếu không tìm thấy chuổi thì trả về giá trị 0.Lợi dụng việc này ta dò tìm, nếu giá trị trả về lớn hơn '0' thì chứng tỏ tìm thấy trong chuổi s có chuổi ký tự ta cần tìm.Bạn có thể xem chi tiết hàm này dưới đây.
    Mô tả:
    InStr([start, ]string1, string2[, compare])
    Tìm chuỗi string2 trong chuỗi string1, tìm từ vị trí start

    Tham số:
    start
    Vị trí tìm
    string1
    Chuỗi tìm kiếm
    string2
    Giá trị cần tìm
    compare
    Chỉ rõ kiểu dữ liệu để so sánh trong quá trình tìm kiếm

    Ghi chú:
    Dùng cho tham số compare
    vbUseCompareOption = –1
    Chế độ tùy chọn, VB sẽ tự động lựa lọai dữ liệu thích hợp
    vbBinaryCompare = 0
    So sánh nhị phân
    vbTextCompare = 1
    So sánh chuỗi
    vbDatabaseCompare = 2
    So sánh dữ liệu
    Ví dụ:Code:
    Option Explicit
    Private Sub Form_Load()
    Dim SearchString, SearchChar, MyPos
    SearchString = "XXpXXpXXPXXP"' String to search in.
    SearchChar = "P"' Search for "P".
    ' So sanh theo cua text tu vi tri 4
    MyPos = InStr(4, SearchString, SearchChar, 1)' Returns 6.
    ' So sanh theo Binary
    MyPos = InStr(1, SearchString, SearchChar, 0)' Returns 9.
    ' So sanh theo Binary, do mac dinh la 0
    MyPos = InStr(SearchString, SearchChar)' Returns 9.
    MyPos = InStr(1, SearchString, "W")' Returns 0.
    End Sub

    Đoạn mã ghi dữ liệu xuống file text
    Code:
    Private Sub LuuTxt_click()

    f = FreeFile
    Open App.Path & "\\ThongTinSV.txt" For Output As f

    Print #f, "Ho lot:", txtHo.Text
    Print #f, "Ten:", txtTen.Text
    Print #f, "Ngay sinh:", cboNgay
    Print #f, "Noi Sinh: "; txtNoiSinh
    Print #f, "Dan toc: ", txtDanToc
    Print #f, "Ton giao: ", txtTonGiao
    Print #f, "Dia Chi: ", txtDiaChi
    Print #f, "Dien thoai:", txtDThoai
    Print #f, "Email: ", txtEmail

    If OpNam.Value = True Then
    Print #f, "Gioi tinh: Nam"
    Else
    Print #f, "Gioi tinh: Nu"
    End If

    Dim NgoaiNgu
    If ChkAnh Then NgoaiNgu = "Anh van,"
    If ChkPhap Then NgoaiNgu = NgoaiNgu & "Phap van,"
    If ChkNga.Value Then NgoaiNgu = NgoaiNgu & "Nga van,"
    If ChkHoa.Value Then NgoaiNgu = NgoaiNgu & "Hoa van"
    Print #f, "Ngoai ngu: ", NgoaiNgu
    Close f
    End Sub


    Với file excel:
    Import từ Excel sang Visual Basic
    Cách thực hiện:
    1. Tạo project VB mới.
    2. Tham chiếu (Reference) thư viện Excel (Microsoft Excel Object Library).
    3. Soạn code với thuật toán:
    - Tạo đối tượng Excel.Application.
    - Mở Workbook (file excel) của bạn.
    - Lấy sheet chứa dữ liệu.
    - Đặt biến I (Long) chạy từ dòng đầu tiên của sheet đến dòng dữ liệu cuối cùng của sheet. Tại mỗi bước dùng lệnh SQL Insert hoặc Recordset.AddNew để thêm dữ liệu vào bảng dữ liệu (Đưa giá trị tại Cells(I,"tên cột") vào Field tương ứng trong bảng. Lưu ý định dạng ngày tháng, nếu bạn dùng định dạng ngày trong Excel thì không sao, còn nếu dùng các định dạng ngày đặc biệt (khác với định dạng của hệ thống) thì phải xử lý lại (dùng hàm DateSerial của VB để tạo giá trị ngày từ giá trị chuỗi ngày lưu trong Excel). Lưu ý thêm về chiều dài của các trường dữ liệu, import từ Excel vào database rất hay gặp trường hợp chiều dài
    dữ liệu trong Excel lớn hơn kích thước định nghĩa của trường, gây ra lỗi khi cập nhật.
    - Đóng workbook, thoát Excel.
    Ví dụ (chỉ là mẫu vì bạn không đưa rõ nguồn dữ liệu): Giả sử bạn có file Excel: C:\data.xls với bảng dữ liệu nằm ở sheet đầu
    tiên, cấu trúc bảng dữ liệu: dòng đầu tiên là tiêu đề, dữ liệu nằm từ dòng thứ 2 trở xuống, kết thúc dữ liệu bằng dòng trống (cột đầu tiên rỗng). Các cột dữ liệu theo bảng tương ứng:
    + ngày tháng (cột A)
    + Mã Sản phẩm (cột B)
    + Khách Hàng (cột C)
    + Số lượng sản phẩm (cột D)
    + Hạn giao hàng (cột E)

    Giả sử tên bảng dữ liệu trong CSDL tên là: tblData
    Private Sub Import()
    Dim mExcel As Excel.Application
    Dim mWorkBook As Excel.Workbook
    Dim mSheet As Excel.Worksheet
    Dim I As Long
    Dim mRs As ADODB.Recordset
    Set mExcel = New Excel.Application
    Set mWorkBook = mExcel.Workbooks.Open("C:\data.xls", , True)
    Set mSheet = mWorkBook.Worksheets(1)
    '--
    Set mRs = New ADODB.Recordset
    mRs.Open "tblData", mCnn, adOpenKeyset, adLockOptimistic
    I = 2
    While Len(mSheet.Cells(I, "A")) > 0
    mRs.AddNew
    mRs.Fields("NgayThang") = CDate(mSheet.Cells(I, "A"))
    mRs.Fields("MaSanPham") = mSheet.Cells(I, "B")
    mRs.Fields("KhachHang") = mSheet.Cells(I, "C")
    mRs.Fields("SoLuong") = Val(mSheet.Cells(I, "D"))
    mRs.Fields("HanGiaoHang") = Val(mSheet.Cells(I, "E"))
    mRs.Update
    '--
    I = I + 1
    Wend
    mWorkBook.Close False
    mExcel.Quit
    mRs.Close
    Set mRs = Nothing
    End Sub


    Xuất dữ liệu:
    [You must be registered and logged in to see this link.]

      Hôm nay: 22.11.17 10:41