DjieSoft, All About Source Code


This is about programming, information technology, computers, source code, program, application and more ...
_______________________________________________________________________________{FOR EDUCATION}
Search in djiesoft

Search with Google

1.Banyak Web/Blog Lain Yang Meng-COPY Sebagian/Seluruh Content/Isi Blog DJIESOFT. BE CAREFUL !!!
2.Beberapa LINK DJIESOFT ada yang Broken karena TUSFILES menghapus file yang sudah lama/expired (1 Year).
3.Please report broken link to be re-Uploaded !

Rabu, 22 Agustus 2012

Cara Membuat Generate Auto Number/No Urut/No Bukti VBNET

Ini merupakan penjelasan tambahan (lebih lanjut) dari postingan saya tentang Basic Generate Auto Number, Kali ini saya akan sedikit menjelaskan untuk beberapa kasus dan jenis No Urut yang biasa ada dalam aplikasi sehari hari. Baiklah saya langsung contohkan ke coding vbnet dan cara melakukan SELECT query untuk mendapatkan No urut terakhir dari database.

Function djie_AutoNumber() As String
        Dim v_sql As String
        'No Bukti Dengan Format Biasa 001,002,003
        v_sql = "SELECT NO_BUKTI FROM TBL_HEAD ORDER BY NO_BUKTI DESC"
        Using con As New SqlClient.SqlConnection("DATA SOURCE=djiesoft;INITIAL CATALOG=test_db;USER ID=sa;PASSWORD=123"
            con.Open()
            Dim cmd As New SqlClient.SqlCommand(v_sql, con)
            Dim reader As SqlClient.SqlDataReader
            reader = cmd.ExecuteReader
            If reader.HasRows Then
                reader.Read()
                Return Mid("000",1,3-(Val(Trim(reader.Item(0).ToString)) + 1).ToString.Length) + (Val(Trim(reader.Item(0).ToString)) + 1).ToString
            Else
                Return "001"
            End If
        End Using
End Function

Untuk kasus lain yang sedikit lebih rumit, misalanya ada kombinasi karakter, tahun, bulan,hari dan sebagainya anda cukup ganti saja pada bagian ini :
        'Contoh Custom No Bukti A001, A002, B001, C001, C002
        'Jadi Setiap Karakter Masing2 A,B,C punya no urut masing2
        v_sql = "SELECT RIGHT(NO_BUKTI,3) AS NO_BUKTI FROM TBL_HEAD WHERE LEFT(NO_BUKTI,1)='A' ORDER BY RIGHT(NO_BUKTI,3) DESC"
        If reader.HasRows Then
            reader.Read()
             Return "A" + Mid("000",1,3-(Val(Trim(reader.Item(0).ToString)) + 1).ToString.Length) + (Val(Trim(reader.Item(0).ToString)) + 1).ToString
        Else
            Return "A001"
        End If

        'Contoh No Bukti yyyymmdd-xxx : 20120801-001,20120801-002
        'Jika Ingin Setiap TAHUN Ganti/Reset Ke 001 Lagi
        v_sql = "SELECT RIGHT(NO_BUKTI,3) AS NO_BUKTI FROM TBL_HEAD WHERE YEAR(LEFT(NO_BUKTI,8))=YEAR(GETDATE()) ORDER BY RIGHT(NO_BUKTI,3) DESC"
        'Jika Ingin Setiap BULAN Ganti/Reset Ke 001 Lagi
        v_sql = "SELECT RIGHT(NO_BUKTI,3) AS NO_BUKTI FROM TBL_HEAD WHERE YEAR(LEFT(NO_BUKTI,8))+MONTH(LEFT(NO_BUKTI,8))=YEAR(GETDATE())+MONTH(GETDATE()) ORDER BY RIGHT(NO_BUKTI,3) DESC"
        'Jika Ingin Setiap HARI Ganti/Reset Ke 001 Lagi
        v_sql = "SELECT RIGHT(NO_BUKTI,3) AS NO_BUKTI FROM TBL_HEAD WHERE YEAR(LEFT(NO_BUKTI,8))+MONTH(LEFT(NO_BUKTI,8))+DAY(LEFT(NO_BUKTI,8))=YEAR(GETDATE())+MONTH(GETDATE())+DAY(GETDATE()) ORDER BY RIGHT(NO_BUKTI,3) DESC"
        If reader.HasRows Then
            reader.Read()
            Return Format(Now.Date, "yyyyMMdd") + "-" + (Val(Trim(reader.Item(0).ToString)) + 1).ToString
        Else
            Return Format(Now.Date, "yyyyMMdd") + "-001"
        End If

Ini adalah cara saya sendiri yang biasa saya lakukan dan tentu harus ada modifikasi sesuai dengan kasus dan kebutuhan anda, dan sebenarnya masih banyak "Jalan/Cara" lain untuk melakukan generate No Urut ini, Mungkin anda bisa lebih menyingkat/menyederhanakan lagi sintak diatas atau mungkin anda mempunya cara lain yang lebih praktis yang bisa share (berbagi) melalui comment dibawah atau mungkin juga anda ingin bertanya tentang kasus No Urut lain yang saya tidak sebutkan diatas. Semoga bermanfaat.

Tags:
cara generate autonumber, cara membuat nobukti bertambah, cara generate nobukti otomatis, cara membuat auto nourut, cara membuat custom nourut vbnet, generate auto increment sqlserver , cara membuat norutu berdasarkan tahun tangal bulan , cara membuat nourut berganti setiap tahun atau bulan, membuat no bukti pertanggal, membuat nourut transaksi vbnet sql

Related Post:

263 komentar:

  1. KEREN.....mas Djie mau nanya untuk coding
    "SELECT RIGHT(NO_BUKTI,3) AS NO_BUKTI FROM TBL_HEAD WHERE YEAR(LEFT(NO_BUKTI,8))=YEAR(GETDATE()) ORDER BY RIGHT(NO_BUKTI,3) DESC"
    ini maksudnya apa ?
    maaf masih newbie...tq

    BalasHapus
    Balasan
    1. artinya:
      pilih 3 digit kanan, dimana tahun di ambil dari 8 digit kiri (tanggal)= tahun (tanggal server) diurutkan berdasarkan 3 digit kanan (...,003,002,001) dengan nilai tertinggi

      jadi contoh format nya = 20120925-003

      Hapus
  2. Hi Mas..
    Minta tolong pencerahannya mas. saya buat Function NoUrut yang 001. saya buat coding nya di Module. bagaimana cara memanggilnya/menampungnya di sebuah textbox di form mas..?? krn functionnya gak ada Object yang, seperti gini
    Function Nourut() as string

    saya dah buat function yang cuma pake 0001, tapi ketika no urut yang kedua, malah menjadi 2 bukan 0002.

    mohon pencerahannya mas..
    thks Putu

    BalasHapus
    Balasan
    1. saya harus lihat dulu function yg mas buat seperti apa? jadi saya akan tahu errornya dan solusinya,,,,

      Hapus
  3. Ini mas source codenya. Awalnya No.Transaksi = 00001, terus ketika Record baru, malah jadi 2 bukan 00002.
    Terus di Window Error List muncul Exception : Function NoUrut doesn't return a value on all code paths. Are you missing Return statement..?
    Mohon pencerahannya mas. thks putu

    Function NoUrut(Txt As TextBox, NAMATABLE As String, FIELD As String) As Integer
    Dim Sql As String = Nothing
    Dim Cmd As New SqlCommand
    Dim Ds As New DataSet
    Dim DtReader As SqlDataReader
    Dim Dt As New DataTable
    Try
    Conn = New SqlConnection(My.MySettings.Default.ConnString)
    Conn.Open()

    Sql = "SELECT " & FIELD & " FROM " & NAMATABLE & " ORDER BY " & FIELD & " DESC "
    Using Conn
    Cmd.Connection = Conn
    Cmd.CommandText = Sql
    DtReader = Cmd.ExecuteReader

    If DtReader.HasRows Then
    DtReader.Read()
    Txt.Text = (DtReader.Item(0).ToString + 1).ToString
    Else
    Txt.Text = 1
    End If
    DtReader.Close()
    End Using

    Catch ex As Exception
    MsgBox(ex.Message)
    End Try
    End Function

    BalasHapus
    Balasan
    1. ok tinggal diubah di bagian ini nya aja :

      Txt.Text = (DtReader.Item(0).ToString + 1).ToString
      else
      Txt.Text = 1

      menjadi :

      Txt.Text = Mid("00000", 1, 5 - val(DtReader.Item(0)).ToString.Length) + (Val(DtReader.Item(0)) + 1).ToString
      else
      Txt.Text = "00001"

      Hapus
  4. Mas djie.. atau Contohnya saya buat format No.Invoice seperti begini.
    FO/GMH/XI/12/0001, dan saya mau taruh di Textbox1. Listing function nya gimana ya mas..??

    maaf sblmnya mas, maklum masih newbie.. heheheh
    Makasi banyak mas. PUTU

    BalasHapus
    Balasan
    1. tdi mas contoh 5 digit ya, sekaranga 4 digit, dan databasenya sql server kan :

      ubah aja menjadi seperti ini :
      "SELECT TOP 1 RIGHT(" & FIELD & ",4) AS BUKTI FROM " & NAMATABLE & " ORDER BY RIGHT(" & FIELD & ",4) DESC "

      trus bagian ini juga :
      Txt.Text = "FO/GMH/XI/12/" + Mid("0000", 1, 4 - Val(DtReader.Item(0)).ToString.Length) + (Val(DtReader.Item(0)) + 1).ToString
      else
      Txt.Text = "FO/GMH/XI/12/0001"

      Hapus
    2. Halo mas djie.. sorry nich saya menggangu lagi.
      mas, saya sudah coba contoh diatas. nourut nya mau otomatis terganti, setelah nourut yang tertampung dalam table sampai nourut 0009, dan ketika mau menjadi 0010, malah menjadi 00010 (jumlah digitnya yang bertambah) yang harusnya menjadi 0010. dan muncul error ketika disimpan (karena size digit nourutnya saya pake Char(4).

      saya sudah coba, tapi tetap gak nemu mas..mohon pencerahannya ya mas.. maaf nich banyak nanya.

      thks
      Putu

      Hapus
    3. oh oh ya,,ada yg kurang,ganti bagian ini nya aja :
      Txt.Text = "FO/GMH/XI/12/" + Mid("0000", 1, 4 - (Val(DtReader.Item(0)) + 1).ToString.Length) + (Val(DtReader.Item(0)) + 1).ToString

      ok, mas putu ganteng !

      Hapus
    4. heheheee.. mas pandjie memang Tok Cer.. Thks ya mas..
      NoUrut nya run as well..

      Jangan bosan2 kasi pencerahannya ya mas..

      thks, mas pandjie guanteng..

      Hapus
  5. Mas.. kalau mau membuat no urut tapi tdak connect database bagaimana ya??? ^o^.. maklum masih pemula.. terima kasih..

    BalasHapus
    Balasan
    1. hmm, tergantung form nya seperti apa dulu,, apa mau generate nourut itu dati grid/list atau textbox aja, yg pastinya menggunakan 1 variable untuk menampung sementara. begitu form itu di close dan dibuka lagi berarti akan kembali ke 1 atau melanjutkan dari list/grid

      Hapus
  6. mas, klo membuat no urut dari pilihan combobox, dari pilihan tersebut nantinya menjadi no urut, dan kombinasi dari isi combox tersebut dan no urut berdasarkan tahun dan kembali ke nol setiap tahun gmn ya caramya? contoh S20120001 untuk isi comoboxsiswa,dan G20120001 untuk guru.

    BalasHapus
    Balasan
    1. sql querynya seperti ini dan eimpan di saat event combobox1_selectedIndexChanged, contoh :
      Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
      Dim SQL As String = "SELECT RIGHT(NO_URUT,4) AS NO_URUT FROM TBL_DATA WHERE YEAR(RIGHT(LEFT(NO_URUT,5),4))=YEAR(GETDATE()) AND LEFT(NO_URUT,1)='" + Mid(ComboBox1.Text, 1, 1) + "' ORDER BY RIGHT(NO_URUT,3) DESC"
      End Sub

      trus selanjutnya ikuti contoh function saya diatas (sesuaikan dengan kebutuhan)

      Hapus
    2. mkasih bnyk mas bwt infonya..

      Hapus
  7. kalau source code auto number rubah no tiap tahun di atas, bisa di terapkan di vb 6 ga gan? klo bsa apa nya yg di rubah?
    mksh..

    BalasHapus
    Balasan
    1. Private Sub ComboBox1_Change()
      Dim hasil As String
      Dim sql As String
      sql = "SELECT RIGHT(NO_URUT,4) AS NO_URUT FROM TBL_DATA WHERE YEAR(RIGHT(LEFT(NO_URUT,5),4))=YEAR(GETDATE()) AND LEFT(NO_URUT,1)='" + Mid(ComboBox1.Text, 1, 1) + "' ORDER BY RIGHT(NO_URUT,3) DESC"
      Dim rec As New ADODB.Recordset
      Set rec = con.Execute(sql)
      If rec.EOF Or rec.BOF Then
      hasil = Mid(ComboBox1.Text, 1, 1) & "0001"
      Else
      hasil = Str(Val(rec.Fields(0).Value) + 1)
      hasil = Left("0000", 4 - Len(hasil)) & hasil
      End If
      End Sub

      Hapus
    2. mksh bnyk gan ilmunya, udh berhasil..

      Hapus
    3. gan maaf, pas di running emg ga da error berhasil, tpi pas tambah data ga jd 0002 ttep 0001, knp ya?

      Hapus
    4. jadinya berapa? 2 aja? ga 0002 ? ataua tetap 1 atau 0001 ? apa benar codingnya di simapn di combobox? atau gmana?

      Hapus
  8. Mas, kalau databasenya pake access 2003 gimana?

    BalasHapus
    Balasan
    1. coba pake ms.access 2010, sintaknya sama saja

      Hapus
  9. mas..

    coding saya ini slhnya dimana yaa?

    Sub Kode_Otomatis()
    Call Koneksi()
    CMD = New OdbcCommand("Select * From tbkaryawan order by kode desc", CONN)
    RD = CMD.ExecuteReader
    RD.Read()
    If Not RD.HasRows Then
    TxtKode.Text = "K-0001"
    Else

    TxtKode.Text = Val(Microsoft.VisualBasic.Mid(TxtKode.Text, 3, 4)) + 1

    If Len(TxtKode.Text) = 1 Then
    TxtKode.Text = "K-000" & TxtKode.Text & ""
    ElseIf Len(TxtKode.Text) = 2 Then
    TxtKode.Text = "K-00" & TxtKode.Text & ""
    ElseIf Len(TxtKode.Text) = 3 Then
    TxtKode.Text = "K-0" & TxtKode.Text & ""
    ElseIf Len(TxtKode.Text) = 4 Then
    TxtKode.Text = "K-" & TxtKode.Text & ""
    End If
    End If
    End Sub

    BalasHapus
    Balasan
    1. coba ganti menjadi ini:

      TxtKode.Text = Val(Microsoft.VisualBasic.Mid(RD.Item("NIK").ToString, 3, 4)) + 1

      NB:
      RD.Item("NIK") ganti dengan nama field yg akan di otomatisasi

      Hapus
    2. alhmdllah dh bsa mas,

      kalo coding di button ubah nya apa mas..?

      kan gini,
      FormKaryawan.TxtKode.Text = Datagrid.CurrentRow.Cells("kode").Value.ToString
      dst...

      soalnya di event load formKaryawan saya call Kode_Otomatis()

      Hapus
    3. maaf kurang faham pertanyaannya

      Hapus
    4. gini mas,coding button ubah sya :

      Private Sub BtnUbah_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnUbah.Click

      FormKaryawan.TxtKode.Text = DGVKry.CurrentRow.Cells("kode").Value.ToString
      FormKaryawan.TxtNama.Text = DGVKry.CurrentRow.Cells("nama").Value.ToString
      FormKaryawan.TxtAlamat.Text = DGVKry.CurrentRow.Cells("alamat").Value.ToString

      FormKaryawan.Show()
      End Sub

      yang jadi masalah TxtNama,TxtAlamat pada formKaryawan tidak terisi. yang terisi cuma Txtkode, soalnya TxtKode saya buat kode_otomatis.

      NB : formKaryawan saya rncang untuk form tambah data sekaligus untuk ubah data.
      tadi sebelum buat kode_otomatis bisa mas,.

      Hapus
    5. alhmdlillah sudah bisa ma :-)

      formKaryawan.show saya letakkan pling atas.

      maksih mas..

      Hapus
    6. Mas kalau misalkan databasenya mysql gimana ya?soalnya saya coba yang 001 tapi berhenti di 010 ga bisa lanjut jadi 011,itu gimana ya mas?
      Mohon batuannya,

      Hapus
    7. fungsi auto generate nya gmana?

      Hapus
  10. Seperti ini mas codingnya:
    cmd = New MySqlCommand("SELECT id_jual FROM jual ORDER BY id_jual DESC", strcon)
    reader = cmd.ExecuteReader
    If reader.HasRows Then
    reader.Read()
    Return Mid("00000", 1, 5 - Val(reader.Item(0)).ToString.Length) + (Val(Trim(reader.Item(0).ToString)) + 1).ToString
    Else
    Return "00001"
    End If
    reader.Close()

    BalasHapus
    Balasan
    1. coba ganti dengan yg ini :

      Dim currentValue As Double = 0
      cmd = New MySqlCommand("SELECT id_jual FROM jual ORDER BY id_jual DESC", strcon)
      reader = cmd.ExecuteReader
      If reader.HasRows Then
      reader.Read()
      currentValue = Val(reader.Item(0).tostring) + 1
      Return Mid("00000", 1, 5 - currentValue.ToString.Length) + currentValue.ToString
      Else
      Return "00001"
      End If
      reader.Close()

      Hapus
    2. alhamdullh maksh mas codingnya maknyus,tp saya rubah sedikit biar jadi A001 ga apa" y mas jd spt ini:
      Dim currentValue As Double = 0
      cmd = New MySqlCommand("SELECT RIGHT(id_jual,3) AS id_jual FROM jual WHERE LEFT(id_jual,1)='A' ORDER BY RIGHT(id_jual,3) DESC", strcon)
      reader = cmd.ExecuteReader
      If reader.HasRows Then
      reader.Read()
      currentValue = Val(reader.Item(0).ToString) + 1
      Return Mid("A000", 1, 4 - currentValue.ToString.Length) + currentValue.ToString
      Else
      Return "A001"
      End If
      reader.Close()
      tp maslahnya sy pngen tiap bln no belakangnya rubah kembali ke A001 gmana y mas, sy sdh coba pke select spt ini::
      cmd = New MySqlCommand("SELECT RIGHT(id_jual,3) AS id_jual FROM jual WHERE YEAR(LEFT(id_jual,8))+MONTH(LEFT(id_jual,8))=YEAR(GETDATE())+MONTH(GETDATE()) ORDER BY RIGHT(id_jual,3) DESC", strcon)
      tapi eror kenapa y mas?maaf sblmnya mas jd keterusan,.

      Hapus
  11. mas bisa kasih contoh membuat no otomatis dengan store prosedure dan cara memanggilnya di form...thanks sebelumnya

    BalasHapus
  12. Tanya pak, saya sudah buat fungsi no otomatis dan sudah jalan dimana nomernya terus bertambah, namun saya ingin merubahnya pada setiap bulan dan tahunnya berubah no otomatisnya kembali ke nomer 0001 lagi, gimana caranya ya pak, tolong bantuannya, koding saat ini seperti dibawah ini, dibagian mana saya harus merubahnya, makasih :

    Sub Kode_Otomatis()
    Dim Tahun As String
    Tahun = Format(Now, "yyyy")
    Dim Bln As String
    Bln = Format(Now, "MM")

    tblIsi = Proses.ExecuteQuery("Select * From kas_kdr order by no_kasbon desc")
    If tblIsi.Rows.Count = 0 Then
    txtNoKasbon.Text = "0001/BKKPD/" & Bln & "/" & Tahun & ""
    Else
    With tblIsi.Rows(0)
    txtnokasbon.Text = .Item("no_kasbon")
    End With

    txtNoKasbon.Text = Val(Microsoft.VisualBasic.Mid(txtNoKasbon.Text, 1, 4)) + 1
    If Len(txtNoKasbon.Text) = 1 Then
    txtNoKasbon.Text = "000" & txtNoKasbon.Text & "/BKKPD/" & Bln & "/" & Tahun & ""
    ElseIf Len(txtNoKasbon.Text) = 2 Then
    txtNoKasbon.Text = "00" & txtNoKasbon.Text & "/BKKPD/" & Bln & "/" & Tahun & ""
    ElseIf Len(txtNoKasbon.Text) = 3 Then
    txtNoKasbon.Text = "0" & txtNoKasbon.Text & "/BKKPD/" & Bln & "/" & Tahun & ""
    ElseIf Len(txtNoKasbon.Text) = 4 Then
    txtNoKasbon.Text = "" & txtNoKasbon.Text & " /BKKPD/ " & Bln & " / " & Tahun & ""
    End If
    End If
    End Sub

    BalasHapus
    Balasan
    1. ok, silahkan coba sintak ini (var_con nya ganti saja dengan yg mas gunakan) :

      Sub Kode_Otomatis()
      Dim Tahun As String
      Tahun = Format(Now, "yyyy")
      Dim Bln As String
      Bln = Format(Now, "MM")

      Using cmd As New SqlClient.SqlCommand("Select no_kasbon From kas_kdr where right(no_kasbon,7)='" + Bln + "/" + Tahun + "' order by LEFT(no_kasbon,4) desc", var_con)
      Dim lastNo As String = cmd.ExecuteScalar()
      If lastNo Is Nothing Then
      txtNoKasbon.Text = "0001/BKKPD/" + Bln + "/" + Tahun
      Else
      txtNoKasbon.Text = Mid("0000", 1, 4 - Val(Mid(lastNo, 1, 4)).ToString.Length) + (Val(Mid(lastNo, 1, 4)) + 1).ToString
      End If
      End Using
      End Sub

      Hapus
    2. mantap pak, setelah saya run yang muncul nomernya saja seperti 0060, setelah saya teliti ternyata kurang ini pak & "/BKKPD/" + Bln + "/" + Tahun, setelah saya tambahkan akhirnya problem solved, makasih pak Pandji

      Hapus
  13. maaf pak,saya masih bingung penggunaannya...
    ada bisa ngasih sourcode jadi nya?

    makasih sebelumnya

    BalasHapus
  14. saya sudah mngetik kode sama persis, tapi saya bngung dimana harus meletakkan sub auto tersebut, saya coba d button tambah tp setelah disimpan, no urut tidak menambah, tetap A001 terus

    terimakasih

    BalasHapus
    Balasan
    1. Contoh :
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      Txt_Nomor.Text = djie_AutoNumber()
      End Sub

      Hapus
  15. Tanya lagi pak, maaf kalo diluar topik, saya bikin program dengan ambil tgl bulan dan tahunnya kayak ini : txtTanggal.Text = System.DateTime.Now.ToString("dd/MM/yyyy"), pada saat form load saya tampilkan textnya supaya tampil tgl bln thn sekarang. Install di client juga sudah berjalan baik, masalah timbul saat settingan tanggal bulan dan tahun di komputer client diganti dan dimundurkan tgl bln dan tahunnya, akhirnya yang muncul bukan tanggal sekarang dan database menjadi kacau.
    Gimana caranya pak walaupun settingan tgl bln tahun di komputer client dirubah, tetapi yang tampil saat program dijalankan tetap tanggal bulan dan tahun sekarang termasuk jamnya juga tetap tidak berubah sesuai komputer servernya, harap bantuannya ya pak Pandji, makasih

    BalasHapus
    Balasan
    1. maaf mas, baru blz, saya baru online lagi
      gini, sema client harus merujuk pada satu server (termasuk datetime fi aplikasi/form nya)
      caranya ini :
      http://djiesoft.blogspot.com/2011/12/get-server-datetime-using-sqlserver.html

      Hapus
    2. makasih banyak pak Pandji, problem solved

      Hapus
  16. Siang mas, Nanya lagi saya disini,,, heee

    saya mencoba auto number dengn kode sperti ini

    Private Function auto() As String
    MyCon = New OleDbConnection(StrCon)
    MyCon.Open()
    StrSql = "SELECT no_Pinjam FROM tb_pinjam ORDER BY no_pinjam DESC"
    ObjCommand = New OleDbCommand(StrSql, MyCon)
    ObjReader = ObjCommand.ExecuteReader()
    If ObjReader.HasRows Then
    ObjReader.Read()
    Return Mid("00000", 1, 5 - Val(ObjReader.Item(0)).ToString.Length) + (Val(ObjReader.Item(0)) + 1).ToString
    Else
    Return "00001"
    End If
    End Function

    pada saat di jalankan masih berjalan sesuai harapan, tapi kalau sudah d angka "000010" jadi berhenti dan tidak lanjut lagi ke angka "000011 dst"

    kira kira apa yang salah ya mas dg kode tersebut?


    terimaskih banyak sebelumnya

    BalasHapus
    Balasan
    1. coba benerin bagian ini nya aja :
      Return Mid("00000", 1, 5 - Val(ObjReader.Item(0)).ToString.Length) + (Val(ObjReader.Item(0)) + 1).ToString
      menjadi :
      Return Mid("00000", 1, 5 - (Val(ObjReader.Item(0)) + 1).ToString.Length) + (Val(ObjReader.Item(0)) + 1).ToString

      Hapus
  17. Komentar ini telah dihapus oleh penulis.

    BalasHapus
  18. maaf mas pandji mau ngerepotin nih tolong dibantu ya hehe. saya ingin membuat no urut otomatis pada textbox di vb 2010 dengan menggunakan sql server kira-kira hasilnya seperti ini
    Contoh : Kode Customer C131018-01
    Keterangan :
    C = Kode Customer
    13 = Kode Tahun Pada 2013
    10 = Kode Bulan Pada Bulan Ke-10 (Oktober)
    18 = kode tanggal
    01 = Nomor Urut Customer yang ke 1
    makasih mas pandji di tunggu balasannya

    BalasHapus
    Balasan
    1. Function djie_AutoNumber() As String
      Dim v_sql As String
      v_sql = "SELECT
      RIGHT(NOURUT,2) AS NOURUT,
      LEFT(NOURUT,1) AS KODE,
      RIGHT(YEAR(GETDATE()),2) AS TAHUN,
      CASE WHEN LEN(MONTH(GETDATE())) =1 THEN '0' + CONVERT(VARCHAR,MONTH(GETDATE())) ELSE MONTH(GETDATE()) END AS BULAN,
      FROM TBL_TEST
      WHERE LEFT(NOURUT,1)='C'
      AND RIGHT(LEFT(NOURUT,3),2) = RIGHT(YEAR(GETDATE()),2)
      AND RIGHT(LEFT(NOURUT,5),2) = CASE WHEN LEN(MONTH(GETDATE())) =1 THEN '0' + CONVERT(VARCHAR,MONTH(GETDATE())) ELSE MONTH(GETDATE()) END
      ORDER BY RIGHT(NOURUT,2) DESC
      "
      Using con As New SqlClient.SqlConnection("DATA SOURCE=djiesoft;INITIAL CATALOG=test_db;USER ID=sa;PASSWORD=123"
      con.Open()
      Dim cmd As New SqlClient.SqlCommand(v_sql, con)
      Dim reader As SqlClient.SqlDataReader
      reader = cmd.ExecuteReader
      If reader.HasRows Then
      reader.Read()
      Return READER("KODE").tostring + READER("tahun").tostring + READER("bulan").tostring + mid ("00",1, 2 - (Val(reader.Item(0).ToString) + 1).ToString.Length) + Val(reader.Item(0).ToString) + 1).ToString
      Else
      Return "C" + Mid(Now.Year.ToString, 3, 2) + IIf(Now.Month.ToString.Length = 1, "0" + Now.Month.ToString, Now.Month.ToString) + "01"
      End If
      End Using
      End Function

      Hapus
  19. tanya mas,
    pada aplikasi client - server, jika auto generate tsb ditampilkan di textbox kemudian nanti disimpan ke dalam tabel, bukankah nanti akan terjadi duplikasi data?
    apakah ada cara utk mengakalinya agar tidak terjadi duplikasi data?

    thanks

    BalasHapus
    Balasan
    1. jawabannya ada disini :
      http://djiesoft.blogspot.com/2013/04/error-handler-generate-nourutbukti-pada.html

      Hapus
    2. cuma pesan error handler aja mas?
      kira² bisa ngga kemudian auto-generate nya lgsg increment gitu?
      misal secara bersamaan (beda bbrp detik/menit) client 1 klik ADD dpt 0001, dan client 2 dpt 0002?
      soale kasus ini dulu pernah ditanya sama dosenku.
      mau ga mau, waktu itu diakali INSERT dulu, kmdn begitu SAVE lgsg pake perintah UPDATE.
      tapi ya itu, njlimeeet alias ribet kwkwkwk.
      mohon pencerahannya mas jika ada solusi yg lebih baik.

      thanks.

      Hapus
    3. hmmm, konsep saya adalah jika client1 dan 2 membawa nobukti yg sama, kemudian hanya bebrapa detik saja perbedaan waktunya dan ternya client 1 lebih dulu insert ke table, kana secara sqlserver/system akan mengunci (lock) table tersebut sampai proses insert itu selesai,

      jadi client 2 akan loading lama (menunggu secara otomatis), jika client 1 sudah selesai insert dan sql sudah unlock/melepas table itu, maka client 2 sudah pasti duplcate (can't insert), maka dari itu di VB.NET nya langsung di tangkap oleh error handle untuk generate lagi bukti yg berbeda

      Hapus
    4. oke mas,
      coba nanti saya test solusi dari mas panji.
      terima kasih pencerahannya mas.

      regards

      Hapus
  20. mas, kalo misalkan cuma ambil bulan dan tahunnya saja gimana ya?
    misal format autonumbernya : nomor/bulan/tahun (001/05/2013)
    perintah SQL nya gimana ya mas agar tiap awal bulan bisa reset mulai dari 001 lagi?
    aku coba utak atik sql yg dari mas pandji ga bisa hehe.
    thanks before.

    BalasHapus
    Balasan
    1. "SELECT LEFT(BUKTI,3) FROM TABLE_SAYA WHERE RIGHT(LEFT(BUKTI,6),2) = '" + VAR_BULAN + "' AND RIGHT(BUKTI,4)='" + VAR_TAHUN + "'"
      'execute reader ...
      If reader.Read Then
      Return MID("000",1,3- (Val(reader.Item(0).ToString) + 1).ToString.Length) + (Val(reader.Item(0).ToString) + 1).ToString + VAR_BULAN + "/" + VAR_TAHUN
      Else
      Return "001/" + VAR_BULAN + "/" + VAR_TAHUN
      End If

      Hapus
  21. Mas pandji saya punya masalah seperti temen temen yang diatas, dari no 001 pas data kedua cuman jadi 2 , gimana mas solusinya? jadi yang saya ingin jadi 002, mohon pencerahan nya mas, ini coding yang saya buat :

    Function AutoNumberdiar() As String
    Call koneksi()
    'No Bukti Dengan Format Biasa 001,002,003
    sql = "SELECT no FROM stokbuku ORDER BY no DESC"
    cmd = New MySqlCommand(sql, conn)
    Dim reader As MySqlDataReader
    reader = cmd.ExecuteReader
    If reader.HasRows Then
    reader.Read()
    Return (Val(Trim(reader.Item(0).ToString)) + 1).ToString
    Else
    Return "001"
    End If
    End Function

    BalasHapus
    Balasan
    1. Function AutoNumberdiar() As String
      Call koneksi()
      'No Bukti Dengan Format Biasa 001,002,003
      Sql = "SELECT no FROM stokbuku ORDER BY no DESC"
      cmd = New MySqlCommand(Sql, conn)
      Dim reader As MySqlDataReader
      reader = cmd.ExecuteReader
      If reader.HasRows Then
      reader.Read()
      Return Mid("000", 1, 3 - (Val(reader.Item(0).ToString) + 1).ToString.Length) + (Val(reader.Item(0).ToString) + 1).ToString
      Else
      Return "001"
      End If
      End Function

      Hapus
    2. makasih mas pandji sukses jalan programnya, hehe :D thanks, semoga sukses blognya mas

      Hapus
  22. pk pandi, tolongin dunk yang buat nmr urut yang ini :

    P1305001

    P = nopinjam
    13 = thun
    05 = bulan
    001 = no. urut

    BalasHapus
    Balasan
    1. "SELECT LEFT(NOBUKTI,3) AS BUKTI FROM TABLE_NAME
      WHERE RIGHT(LEFT(NOBUKTI,3),2) = '" + PARAM_TAHUN + "'
      AND RIGHT(LEFT(NOBUKTI,5),2) = '" + PARAM_BULAN + "'
      ORDER BY LEFT(NOBUKTI,3) DESC"

      ITU SQL SELECT NYA
      '.....
      If reader.HasRows Then
      reader.Read()
      Return "P" + PARAM_TAHUN + PARAM_BULAN + MID("000",1,3-(Val(Trim(reader.Item(0).ToString)) + 1).ToString.lENGTH)+ (Val(Trim(reader.Item(0).ToString)) + 1).ToString
      Else
      Return "P" + PARAM_TAHUN + PARAM_BULAN + "001"
      End If

      jadi setiap ganti bulan dan tahun akan kembali ke 001

      Hapus
  23. Mas, bisa gk kasih source code lengkap coding diatas untuk di download dalam bentuk VB.Net,.
    Makasih mas sebelumnya, moga makin maju & berkembang ilmunya,.

    BalasHapus
    Balasan
    1. amin..
      iya nih pengennya, tp blm ada waktu..

      Hapus
  24. maaf mas, bisa tolongin saya buatin nomor urut otomatis,..
    saya mw buat nmor urut spt ini: 001/BHS-Gnj/2013

    dimana:
    001=nomor urutan daftar
    BHS=bahasa
    Gnj=Ganjil (1,2,3,4,5,6)dalam bulan
    Gnp=Genap (7,8,9,10,11,12)dalam bulan
    2013=tahun
    pemisah= / & -

    jadi bila bulan berganti termasuk kedalam priode genap maka kata "Gnj" berubah jadi "Gnp" tapi nomor urut tdk brubah,nomor urut berubah bila berganti tahun maka kembali ke 001.
    tolongin y mas, d tunggu pencerahannya mas.
    makasih sebelumnya mas.

    BalasHapus
    Balasan
    1. "SELECT LEFT(NOBUKTI,3) AS BUKTI FROM TABLE_NAME WHERE RIGHT(NOBUKTI,4)='" + PARAM_TAHUN + "' ORDER BY LEFT(NOBUKTI,3) DESC"
      ITU SQL SELECT NYA
      '.....
      dim tempNo as string
      If reader.Read() Then
      tempNo = MID("000",1,3-(Val(reader.Item(0).ToString) + 1).ToString.lENGTH) + (Val(reader.Item(0).ToString) + 1).ToString
      tempNo = tempNo + "/BHS-" + iif(val(PARAM_BULAN) MOD 2 = 0,"Gnp","Gnj") + "/" + PARAM_TAHUN
      return tempNo
      Else
      Return "001" + "/BHS-" + iif(val(PARAM_BULAN) MOD 2 = 0,"Gnp","Gnj") + "/" + PARAM_TAHUN
      End If

      Hapus
    2. mas, PARAM_BULAN sama PARAM_TAHUN nya harus di deklarasikan dahulu y mas.?

      Hapus
    3. ya.. jadi param_tahun dan bulan itu adalah tahun dan bulan sekarang (now)
      contoh :
      dim param_tahun as string = Now.Year.ToString()
      dim param_bulan as string = Now.Month.ToString()

      Hapus
  25. ok mas, makasih dh bisa di run.
    tp mas masih binggung ni.
    kan fungsi MOD itu mencari sisa bagi, jadi bila sisanya 0=genap, 1=ganjil.
    seperti ini hasil nya mas,;
    Bulan hasil MOD
    1 1
    2 0
    3 1
    4 0
    5 1
    6 0
    7 1
    8 0
    9 1
    10 0
    11 1
    12 0

    berarti logikanya blum benar mas.
    seharusnya
    Bulan Hasil
    1 1(Ganjil)
    2 1
    3 1
    4 1
    5 1
    6 1
    7 0 (Genap)
    8 0
    9 0
    10 0
    11 0
    12 0
    seperti ini mas.
    mohon bantuannya mas.

    BalasHapus
    Balasan
    1. ok....

      If reader.Read() Then
      tempNo = Mid("000", 1, 3 - (Val(reader.Item(0).ToString) + 1).ToString.lENGTH) + (Val(reader.Item(0).ToString) + 1).ToString
      tempNo = tempNo + "/BHS-" + IIf(Val(PARAM_BULAN) >= 7, "Gnp", "Gnj") + "/" + PARAM_TAHUN
      Return tempNo
      Else
      Return "001" + "/BHS-" + IIf(Val(PARAM_BULAN) >= 7, "Gnp", "Gnj") + "/" + PARAM_TAHUN
      End If

      Hapus
    2. okee...
      :D
      sudah bisa di Run mas aplikasinya.
      Makasih y mas buat pencerahannya.

      Hapus
    3. yup, sama..
      jangan bosan berkunjung kemari...

      Hapus
    4. yoi mas,..

      tapi mas, ada sedikit problem ni.
      macam mana mengantisipasi agar tidak error bila data telah menlewati 999/BHS-gnj/2013?
      mohon pencerahanya mas,.

      Hapus
    5. maunya gimana setelah 999 ? berarti tidak sebanding dengan frekwensi datanya
      solusinya tambah aja digitnya 99999 misalnya

      karena sudah ga bisa lagi ditambah 999 mentok, paling klo mau cek tinggal seperti ini :

      If reader.Read() Then
      if (Val(reader.Item(0).ToString) + 1).ToString.lENGTH = 4 then 'jika udah 4 digit (999 + 1 = 1000)
      msgbox "number is full 999"
      exit sub
      end if
      tempNo = Mid("000", 1, 3 - (Val(reader.Item(0).ToString) + 1).ToString.lENGTH) + (Val(reader.Item(0).ToString) + 1).ToString
      tempNo = tempNo + "/BHS-" + IIf(Val(PARAM_BULAN) >= 7, "Gnp", "Gnj") + "/" + PARAM_TAHUN
      Return tempNo
      Else
      Return "001" + "/BHS-" + IIf(Val(PARAM_BULAN) >= 7, "Gnp", "Gnj") + "/" + PARAM_TAHUN
      End If

      Hapus
    6. iy mas, mau nya kalau sudah lewat 999 ada peringatanya
      :D
      makasih mas solusinya.

      Hapus
  26. Mas Pandjie, sy pingin buat no faktur yg tampil di textbox dg format "SLO/salesman/00001". "salesman" dimabil dari txtSales. Database sqlserver2008. Mohon petunjuknya. Tq.

    BalasHapus
    Balasan
    1. "SELECT RIGHT(NOBUKTI,5) AS BUKTI FROM TBL_TRANS ORDER BY RIGHT(NOBUKTI,5) DESC"
      'ITU SQLNYA
      '........
      If reader.Read() Then
      Return "SLO/" + TXTSALES.TEXT + MID("00000", 5 - (Val(reader.Item(0).ToString) + 1).ToString.lENGTH) + (Val(reader.Item(0).ToString) + 1).ToString
      Else
      Return "SLO/" + TXTSALES.TEXT + "/00001"
      End If

      Hapus
    2. Maaf, ngrepoti lg. Datatypenya harusnya apa, mas? int atau char? Sy pingin no faktur yg tersimpan di database formatnya SLO/Joe/00001.

      Hapus
    3. varchar(13) jika memang salesman = selalu 3 digit
      13 itu jumlah semua digit...

      jika memang saleman berubah2, misalh ada yg 5 digit, 6 digit dst
      maka untuk jaga2 varchar(30) aja

      Hapus
  27. tanya pak, kenapa ya saat menampilkan laporan crystal report untuk pertama kali agak lambat, sedangkan untuk selanjutnya tampilannya bisa cepat, jadi ada perbedaan waktu untuk tampilan pertama dan kedua. Apa ada cara supaya tampilan yang pertama bisa secepat tampilan kedua, saya pake vb.net, tolong dibantu ya pak, makasih

    BalasHapus
    Balasan
    1. kemungkinan tampilan pertama lama itu karena load semua template/design/data source
      biasanya setelah semua itu diload, maka aka tersimpan ke cach/memory, sehingga tampilan
      kedua dan seterusnya itu akan cepat, karena sudah tersedia di memory

      hal ini adalah proses normal, coba cari ke google untuk maslah ini

      Hapus
  28. Komentar ini telah dihapus oleh penulis.

    BalasHapus
  29. klo auto generatenya diletakkan di textbox caranya gmana mas?? tp tetap make database mysql..
    jadi ketika form yg ada textboxnya diaktifkan autogeneratenya muncul di texbox..

    mohon pencerahannya

    BalasHapus
    Balasan
    1. fungsi autogenerate nya udah ada kan ? contoh :
      function generate() as string
      ...sintak
      return nomor
      end fuction

      nah untuk enabled/disabled textbox itu pasti ada sintaknya kan ?
      misal di tombol baru (enabled = true / text1=aktif)

      private sub cmdBaruClick()
      textBox1.Text = generate()
      end sub

      Hapus
  30. mas mau tanya,,
    saya mencoba mengikuti tuk ngebuat no order otomatis,,
    pd sat no PB-0001 bs muncul tp pada sat mw input yg k2,no ttp muncul PB-0001 bkn PB-0002,,
    mohon pencerahan'y,,
    neh source coding'y

    Dim Sql As String = Nothing
    Dim Cmd As New OleDbCommand
    Dim Ds As New DataSet
    Dim DtReader As OleDbDataReader
    Dim Dt As New DataTable
    Try
    Call Koneksi()
    Sql = "Select * from Transaksi where No_Order in (select max(No_Order) from Transaksi) order by No_Order desc"
    Using CONN
    Cmd.Connection = CONN
    Cmd.CommandText = Sql
    DtReader = Cmd.ExecuteReader

    If DtReader.HasRows Then
    DtReader.Read()
    TextBox1.Text = "PB-" + Mid("0000", 1, 4 - (Val(DtReader.Item(0)) + 1).ToString.Length) + (Val(DtReader.Item(0)) + 1).ToString
    Else
    TextBox1.Text = "PB-0001"
    End If
    DtReader.Close()
    End Using
    Catch ex As Exception
    MsgBox(ex.Message)
    End Try

    BalasHapus
    Balasan
    1. kesalahannya hanya di swlquerynya, coba ganti dengan ini :
      "Select RIGHT(No_Order,4) AS No_Order from Transaksi order by RIGHT(No_Order,4) desc"

      Hapus
    2. mas panji,,
      msh tetep,,
      saat qt running lg,no order'y ga mw berubah jadi PB-0002 tetep PB-0001,,

      Hapus
    3. coba kita tambahkan validasi, ganti jadi ini :

      "Select RIGHT(No_Order,4) AS No_Order from Transaksi WHERE LEN(No_Order)=7 AND LEFT(No_Order,3)='PB-' order by RIGHT(No_Order,4) desc"

      Hapus
    4. masih tetep :(

      Hapus
    5. hmm, coba ganti pas bagian ini jadi :

      DtReader = Cmd.ExecuteReader

      If DtReader.Read() Then
      TextBox1.Text = "PB-" + Mid("0000", 1, 4 - (Val(DtReader.Item(0)) + 1).ToString.Length) + (Val(DtReader.Item(0)) + 1).ToString
      Else
      TextBox1.Text = "PB-0001"
      End If

      'jangan pake hasrows, tapi langsung .read()

      Hapus
    6. msh sama mas,,
      apa mungkin coding'y bermasalah yah ??
      kalo sat manggil koneksi ga masalah kn?
      ini module koneksi'y

      Public Sub Koneksi()
      STR = "Provider=SQLNCLI.1;Data Source=192.168.1.1\DB;Password=xxx;User ID=sa;Initial Catalog=PB"
      CONN = New OleDbConnection(STR)
      If CONN.State = ConnectionState.Closed Then
      CONN.Open()
      End If
      End Sub

      Hapus
    7. coba kamu jalankan query nya di sql analyzer (di management studio) :

      Select RIGHT(No_Order,4) AS No_Order from Transaksi WHERE LEN(No_Order)=7 AND LEFT(No_Order,3)='PB-' order by RIGHT(No_Order,4) desc

      nah nnti isinya/hasilnya apa ? lihat row yg paling atas..

      apakah benar isinya ? PB-0001 ? atau berapa ?

      Hapus
    8. kosong hasil'y

      Hapus
    9. nah, berarti memang blm ada data/kosong, makanya hasil generatenya = PB-0001
      coba simpan dulu datanya. setelah data itu disimpan, coba generate lagi, harusnya PB-0002

      klo ternyata masih kosong (generate masih PB-0001), berarti harus cek pas SIMPAN datanya udah benar atau blm ? jangan2 ga bisa nyimpen.. tapi hanya mesaagebox "data tersimpan". atau gara gra ga committrans

      Hapus
    10. tp klo saya menggunakan query select*from Transaksi,,
      data muncul yg PB-0001,,
      tp klo pke query dr mas tidak ada data'y,,
      saya liat di database transaksi data PB-0001 sudah ada apakah ini blm tersimpan mas ???

      Hapus
    11. pastikan typedata No_Order = VARCHAR(7)
      klo CHAR pasti kosong terus

      klo pun CHAR harus CHAR(7) jangan CHAR(10) atau yg lainnya

      Hapus
    12. sorry klo VARCHAR bebas, masu VARCHAR(10), VARCHAR(50)..

      klo CHAR harus 7 = CHAR(7)

      Hapus
    13. yuhuuuiiiii
      bisa,,
      makasih y mas,,
      teryata aq lupa ganti (7)'y..
      bener2 keren deh mas panji ini,,
      thank's a lot :D

      Hapus
    14. mas,,
      balik lg neh,,
      klo yg bagian PB- di ganti ma tahun gmn yah ??
      misal "2013"
      terus klo tahun'y berubah mulai dari 0001 lagi
      makasi

      Hapus
    15. Select RIGHT(No_Order,4) AS No_Order from Transaksi WHERE LEFT(No_Order,4)='" + variable_tahun + "' order by RIGHT(No_Order,4) desc

      Hapus
    16. terus klo tahun'y berubah k tahun 2014 mulai dr nol lg ga?
      yang bagian ini LEFT(No_Order,4) seharus'y ini bkn LEFT(No_Order,5) kan ada 2013- ??
      iya ga??

      Hapus
    17. ya tergantung kamu
      Select RIGHT(No_Order,4) AS No_Order from Transaksi WHERE LEFT(No_Order,4)='" + variable_tahun + "' order by RIGHT(No_Order,4) desc

      saya asumsi variable_tahun = 2013 tanpa -
      contoh variable_tahun = datetime.year.tostring

      klo kamu ingin validasi sama strip nya juga ya boleh lah ga masalah jadi :

      variable_tahun = 2013 + "-"
      jadinya :
      LEFT(No_Order,5)='" + variable_tahun + "'

      yg mana aja bebas, hasilnya sama aja

      Hapus
    18. msh salah di variabel tahun'y y mas

      Dim v_Sql As String = Nothing
      Dim Cmd As New OleDbCommand
      Dim Ds As New DataSet
      Dim DtReader As OleDbDataReader
      Dim Dt As New DataTable
      Dim variable_tahun As String
      variable_tahun = datetime.year.tostring
      Try
      Call Koneksi()
      v_Sql="Select RIGHT(No_Order,4) AS No_Order from Transaksi WHERE LEFT(No_Order,5)='" + variable_tahun + "' order by RIGHT(No_Order,4) desc"
      Using CONN
      Cmd.Connection = CONN
      Cmd.CommandText = v_Sql
      DtReader = Cmd.ExecuteReader


      If DtReader.Read() Then
      TextBox1.Text = tgl +"-"+ Mid("0001", 1, 4 - (Val(DtReader.Item(0)) + 1).ToString.Length) + (Val(DtReader.Item(0)) + 1).ToString
      Else
      TextBox1.Text = "2013-0001"
      End If
      DtReader.Close()
      End Using
      Catch ex As Exception
      MsgBox(ex.Message)
      End Try

      seperti ini kodingan'y,,
      tp msh ga bs tampil

      Hapus
    19. saya kan udah jelaskan..
      mas kurang teliti ya baca nya

      klo 5, berarti
      gini : variable_tahun = datetime.year.tostring + "-"

      klo 4
      gini : variable_tahun = datetime.year.tostring

      Hapus
    20. iya,,
      tp datetime itu mksd'y datetimepicker1 bkn??
      koq msh error ,,
      apa datetime ajah??
      tp ga bs datetime.year

      Hapus
    21. DateTime.Now.Year.ToString + "-"

      Hapus
    22. ok mas uda bisa,,
      dan saya cb modif tampilan,,
      tp saya nemuin kendala,,pertama saya menginginkan jika tahun berubah maka mulai dr awal lg,,
      kmren saya mencoba pakai tanggal,,dan pagi ini saya melihat tdk kembali k awal,,
      contoh data tgl 27,,
      1.27-000001
      2.27-000002
      3.27-000003
      nah pagi ini sy coba input
      4.28-000004
      bkn 28-000001
      salah dmn y mas?
      neh code
      Sql = "Select RIGHT(NoOrder,8) AS NoOrder from PBK WHERE LEN(NoOrder)=11 AND LEFT(NoOrder,3)='27-' order by RIGHT(NoOrder,8) desc"
      If DtReader.Read() Then
      TextBox1.Text = tgl + "-" + Mid("00000000", 1, 8 - (Val(DtReader.Item(0)) + 1).ToString.Length) + (Val(DtReader.Item(0)) + 1).ToString
      Else
      TextBox1.Text = "27-00000001"
      End If

      makasih maf ngerepotin

      Hapus
    23. eh salah maksud'y
      1.27-00000001
      2.27-00000002
      3.27-00000003
      nah pagi ini sy coba input
      4.28-00000004
      bkn 28-00000001
      dg CHAR(11) di sql

      Hapus
    24. cek dulu aja query ini di sql:
      Select RIGHT(NoOrder,8) AS NoOrder from PBK WHERE LEN(NoOrder)=11 AND LEFT(NoOrder,3)='27-' order by RIGHT(NoOrder,8) desc

      apa hasilnya..

      saya rasa sintak udah bener

      Hapus
    25. msh mas,,
      klo saya bandingkan dg sintak mas d page ini ada GET DATE dt sintak sql'y itu fungsi'y apa y,,
      berarti qr2 salah d sintak sql apa dtReader'y yah??
      dia ga mw otomatis ke awal nomor'y,,

      Hapus
    26. mas di bagian sql yg LEFT(NoOrder,3)='27-' yg '27-' klo saya gnt '28-' yg tgl hari ini bs berlanjut tp klo 27- ga brtambah nomor'y,,itu bs d gnt 'tgl ' gt ga??
      tp msh error,,
      logika'y gmn yah?

      Hapus
  31. Assalamualaikum , Pagi Mas Pandji , mohon pencerahannya , coding sy seperti ini :
    Function anggun_AutoNumber() As String
    Dim kode As String
    'No Bukti Dengan Format Biasa 001,002,003
    kode = "SELECT RIGHT(kd_penyewa,3) AS kd_penyewa FROM sewa WHERE LEFT(kd_penyewa,1)='PMDC' ORDER BY RIGHT(kd_penyewa,3) DESC"

    Dim acscmd As New OleDb.OleDbCommand
    acscmd.CommandText = kode
    acscmd.Connection = conaccess
    conreader = acscmd.ExecuteReader

    If conreader.HasRows Then
    conreader.Read()
    Return "PMDC" +
    Mid("00", 1, 3 - (Val(Trim(conreader.Item(0).ToString)) + 1).ToString.Length) + (Val(Trim(conreader.Item(0).ToString)) + 1).ToString
    Else
    Return "PMDC01"
    End If

    End Function

    running dgn baik dan muncul, tp pas mau add data lg kode penyewa nya ttp PMDC01 , bukan PMDC02 dst , mohon pencerahannya . terimakasih

    BalasHapus
    Balasan
    1. walaikum salam , coba ini :

      Function anggun_AutoNumber() As String
      Dim kode As String
      'No Bukti Dengan Format Biasa 001,002,003
      kode = "SELECT RIGHT(kd_penyewa,2) AS kd_penyewa FROM sewa WHERE LEFT(kd_penyewa,4)='PMDC' ORDER BY RIGHT(kd_penyewa,2) DESC"

      Dim acscmd As New OleDb.OleDbCommand
      acscmd.CommandText = kode
      acscmd.Connection = conaccess
      conreader = acscmd.ExecuteReader

      If conreader.HasRows Then
      conreader.Read()
      Return "PMDC" +
      Mid("00", 1, 2 - (Val(Trim(conreader.Item(0).ToString)) + 1).ToString.Length) + (Val(Trim(conreader.Item(0).ToString)) + 1).ToString
      Else
      Return "PMDC01"
      End If

      End Function

      Hapus
    2. baik sy coba dlu y mas, btw fb nya ga bisa add ya mas..hehehe cm bsa berlanggangan.

      Hapus
  32. tanya pak, saya sudah buat laporan crystal report kayak gini :

    No. Nama NIP No. Sertifikat
    1 Akemat 001 133/OK/KK/VII/2010
    2 Darmadi 002 134/OK/KK/VII/2010
    3 Herianto 003 135/OK/KK/VII/2010

    maunya sih bila no sertifikat yang dipilih diklik dengan mouse, langsung bisa link ke dan membuka file pdf sesuai no sertifikatnya, apa itu dimungkinkan pak, kalo mungkin tolong caranya dong pak, makasih

    BalasHapus
    Balasan
    1. saya blm pernah buat hal seperti itu
      hehehe...
      tapi mungkin klo bukan dari Crystal report itu bisa.
      misal data dibawah ini:
      No. Nama NIP No. Sertifikat
      1 Akemat 001 133/OK/KK/VII/2010
      2 Darmadi 002 134/OK/KK/VII/2010
      3 Herianto 003 135/OK/KK/VII/2010

      adanya di datagridview, nah begitu di click (row nya) langsung buka file pdf, itu bisa.


      Hapus
    2. apa bisa diberikan caranya pak kalo buka file pdf lewat datagridview dengan model laporan diatas, makasih

      Hapus
    3. mas coba baca dulu ini :
      http://djiesoft.blogspot.com/2013/04/membuat-pdfviewer-open-pdf-dengan.html
      hampir sama konsepnya

      Hapus
  33. Mas mau nanya, kalau penambahan auto number dengan sebelumnya dia ngambil data dari kd lain, contoh dia ingin membuat copybuku dengan kd = B00101 , nah B001 nya di ambil dari kode buku, tapi kalo kode buku B002 kd copy buku nya menjadi B00201 itu gimana yah mas?

    codingan saya seperti ini, tapi salah dan gagal
    Public Function getMaxno_copybuku() As String
    Dim red As OleDbDataReader
    Dim sql As String
    Dim no_copybuku As String
    sql = "Select RIGHT(nocopybuku,7)as nocopybuku From CopyBuku WHERE kdbuku(LEFT(nocopybuku,5))='B' ORDER BY RIGHT(nocopybuku,7) DESC"
    red = k.runQuery(sql)
    red.Read()
    If red.IsDBNull(0) Then
    no_copybuku = "0000000"
    Else
    no_copybuku = red.Item(0)

    End If
    Return no_copybuku
    End Function

    BalasHapus
    Balasan
    1. sebelum saya blz,
      nnti hasil akhirnya inginnya seperti ini bukan ? :
      B00101
      B00102
      B00103
      B00201
      B00202
      B00301

      Hapus
    2. iya bang, mohon bantuannya.thanks

      Hapus
    3. mohon bantuannya kira" program di selectnya gimana yah?

      Hapus
    4. mas kok ga di kasih tanggapan atau balasan yah?mohon bantuannya mas

      Hapus
    5. Public Function getMaxno_copybuku(kodebuku) As String
      Dim red As OleDbDataReader
      Dim sql As String
      Dim no_copybuku As String
      sql = "Select RIGHT(nocopybuku,2)as nocopybuku From CopyBuku WHERE LEFT(nocopybuku,4)='" + kodebuku + "' ORDER BY RIGHT(nocopybuku,2) DESC"
      If red.read Then
      no_copybuku = kodebuku + mid("00",1,2- (val(red(0))+1)).tostring.Length ) + (val(red(0))+1)).tostring
      Else
      no_copybuku = kodebuku + "01"
      End If
      Return no_copybuku
      End Function

      contoh pemanggilan fungsi
      txt_no.text = getMaxno_copybuku("B001")

      Hapus
    6. mas kok ga bisa yah? keluarnya B102, kode bukunya ga ambil dari Db yah?

      Hapus
    7. di db nya kode buku nya berapa ?
      B1 atau B001 ?
      sintak diatas untuk kode buku yg 4 digit
      B001, B002 kan kanya seperti itu ...
      baru belakangnya 01,02,03
      jadi B00101, B00102, dst

      Hapus
  34. maaf mas nanya lagi
    saya bikin generate yg setiap hari reset kembali ke 001, tetapi kq kl d klik g nambah lagi tetap di 20130702-001
    tp unt hari esok nya udah ganti tgl 20130703-001.

    kode nya seperti ini mas

    Try
    mycon = New SqlConnection(strCon)
    mycon.Open()
    'QUERY TGL, BLN ,THN
    strSql = "SELECT RIGHT(kd_nasabah,1) AS kd_nasabah FROM Tb_nasabah WHERE YEAR(LEFT(kd_nasabah,8))+MONTH(LEFT(kd_nasabah,8))+DAY(LEFT(kd_nasabah,8))=YEAR(GETDATE())+MONTH(GETDATE())+DAY(GETDATE()) ORDER BY RIGHT(kd_nasabah,1) DESC"
    objCommand = New SqlCommand(strSql, mycon)
    objReader = objCommand.ExecuteReader()
    If objReader.HasRows Then
    objReader.Read()
    Return Format(Now.Date, "yyyyMMdd") + "-" + (Val(Trim(objReader.Item(0).ToString.Length)) + 1).ToString '(Val(objReader.Item(0)) + 1).ToString)
    Else
    Return Format(Now.Date, "yyyyMMdd") + "-001"
    End If
    Catch ex As Exception
    MsgBox(ex.Message.ToString)
    End Try
    Return Nothing

    makash mas sebelumnya

    BalasHapus
    Balasan
    1. coba ini :

      strSql = "SELECT RIGHT(kd_nasabah,3) AS kd_nasabah FROM Tb_nasabah WHERE YEAR(LEFT(kd_nasabah,8))+MONTH(LEFT(kd_nasabah,8))+DAY(LEFT(kd_nasabah,8))=YEAR(GETDATE())+MONTH(GETDATE())+DAY(GETDATE()) ORDER BY RIGHT(kd_nasabah,3) DESC"
      objCommand = New SqlCommand(strSql, mycon)
      objReader = objCommand.ExecuteReader()
      If objReader.HasRows Then
      objReader.Read()
      Return Format(Now.Date, "yyyyMMdd") + "-" + mid("000",1, 3 - (Val(objReader.Item(0).ToString) + 1).ToString.Length) + Val(objReader.Item(0).ToString) + 1).ToString
      Else
      Return Format(Now.Date, "yyyyMMdd") + "-001"
      End If

      Hapus
  35. Bang mau nanya kalo mau bikin nis autonumber itu kan formatnya tahun ajaran contoh : 1314(tahunajaran)07(bulan)nah baru 001 gitu, tapi kalo setiap tahun dia mau berganti otomatis yg tahun ajarannya gimana bang? maaf newbie.hehehe

    BalasHapus
    Balasan
    1. Sub generate_tahun_ajaran()
      Dim nomor As String = ""
      'syarat tahun ajaran sudah ditentukan, contoh 1314
      'akan kembali ke 001 jika tahun+bulan ganti
      Dim tahun_ajaran As String = "1314"
      Dim bulan As String = Format(Now.Date, "MM")
      Dim sql As String = ""
      sql = "SELECT RIGHT(THN_AJR,3) as THN_AJR FROM TBL_AJARAN WHERE LEFT(THN_AJR,6)='" + tahun_ajaran + bulan + "' ORDER BY RIGHT(THN_AJR,3) DESC "
      Using cmd As New SqlClient.SqlCommand(sql, conn)
      Using rdr As SqlClient.SqlDataReader = cmd.ExecuteReader
      If rdr.Read Then
      nomor = tahun_ajaran + bulan + Mid("000", 1, 3 - (Val(rdr(0)) + 1).ToString.Length) + (Val(rdr(0)) + 1).ToString
      Else
      nomor = tahun_ajaran + bulan + "001"
      End If
      End Using
      End Using
      End Sub

      Hapus
    2. berarti buat Db tahun ajaran sama bulan yah mas?

      Hapus
    3. terimakasih mas, berarti mau dia ngambil atau tidak dari db, tetap codingan ini yah?

      Hapus
  36. Mf mas
    setelah saya coba masaih tidak jalan mas, angka nya tetap tidak nambah (20130703-001)

    BalasHapus
    Balasan
    1. data sudah saya hapus mas, tetapi masih tidak mau nambah angkanya (20130703-001)

      Hapus
    2. coba ganti sql query nya jadi ini :

      strSql = "SELECT RIGHT(kd_nasabah,3) AS kd_nasabah FROM Tb_nasabah WHERE LEFT(kd_nasabah,8)=convert(varchar,year(getdate())) + case when len(convert(varchar,month(getdate())) ) =1 then '0'+convert(varchar,month(getdate())) else convert(varchar,month(getdate())) end + case when len(convert(varchar,day(getdate())) ) =1 then '0'+convert(varchar,day(getdate())) else convert(varchar,day(getdate())) end ORDER BY RIGHT(kd_nasabah,3) DESC"

      Hapus
    3. Allhamdulillah....
      terimakasih mas sudah jalan autonumber nya...
      btw itu query artinya apa ya mas?

      terimakasih semoga makin pinter mas djie nya dan makin banyak pahala
      Amiin

      Hapus
  37. knpa yah saya punya gak mau bertambah kalau setelah di save mas... padahalsaya udah panggil di tombol save,, mohon bantuannya,,
    Sub autonumber()
    Try
    koneksi()

    Dim cmd As OleDbCommand
    cmd = New OleDbCommand("select * from data_gapok order by kd_gapok desc ", conn)
    rd = cmd.ExecuteReader
    If rd.Read Then
    Txtkdgapok.Text = rd.Item(0)
    Else
    Txtkdgapok.Text = "GAPOK-A1-000"
    End If

    Catch ex As Exception
    MsgBox(ex.Message)
    End Try
    End Sub

    BalasHapus
    Balasan
    1. Sub autonumber()
      Try
      koneksi()

      Dim cmd As OleDbCommand
      cmd = New OleDbCommand("select RIGHT(kd_gapok,3) AS kd_gapok from data_gapok order by RIGHT(kd_gapok,3) desc ", conn)
      rd = cmd.ExecuteReader
      If rd.Read Then
      Txtkdgapok.Text = "GAPOK-A1-" + MID("000",1,3-(VAL(rd.Item(0))+1).ToString.Length ) + (VAL(rd.Item(0))+1).ToString
      Else
      Txtkdgapok.Text = "GAPOK-A1-000"
      End If

      Catch ex As Exception
      MsgBox(ex.Message)
      End Try
      End Sub

      Hapus
  38. mas itu jawaban untuk pertanyaan muhammad rizki kira" solusinya seperti apa ya mas?

    BalasHapus
    Balasan
    1. Sub generate_tahun_ajaran()
      Dim nomor As String = ""
      'syarat tahun ajaran sudah ditentukan, contoh 1314
      'akan kembali ke 001 jika tahun+bulan ganti
      Dim tahun_ajaran As String = "1314"
      Dim bulan As String = Format(Now.Date, "MM")
      Dim sql As String = ""
      sql = "SELECT RIGHT(THN_AJR,3) as THN_AJR FROM TBL_AJARAN WHERE LEFT(THN_AJR,6)='" + tahun_ajaran + bulan + "' ORDER BY RIGHT(THN_AJR,3) DESC "
      Using cmd As New SqlClient.SqlCommand(sql, conn)
      Using rdr As SqlClient.SqlDataReader = cmd.ExecuteReader
      If rdr.Read Then
      nomor = tahun_ajaran + bulan + Mid("000", 1, 3 - (Val(rdr(0)) + 1).ToString.Length) + (Val(rdr(0)) + 1).ToString
      Else
      nomor = tahun_ajaran + bulan + "001"
      End If
      End Using
      End Using
      End Sub

      Hapus
  39. mas misalkan autonumbernya seperti ini gimana?
    "01/Pdt.G/2013/PN.Jkt.Tim." jadi hanya yang 01 saja yang jadi autonumber dan tahunnya bisa berubah setiap tahun? mohon pencerahannya :D

    BalasHapus
    Balasan
    1. UNTUK SQL NYA :
      SELECT LEFT(BUKTI,2) AS BUKTI, YEAR(GETDATE()) AS TAHUN FROM TBL_TEST WHERE RIGHT(LEFT(BUKTI,13),4) = CONVERT(VARCHAR(4),YEAR(GETDATE())) ORDER BY LEFT(BUKTI,2) DESC

      UNTUK SINTAKNYA :
      dim kode as string = ""
      dim tahun as string = Now.Date.Year.ToString
      If reader.Read() Then
      kode = Mid("00",1,2-(Val(Trim(reader.Item(0).ToString)) + 1).ToString.Length) + (Val(Trim(reader.Item(0).ToString)) + 1).ToString
      kode = kode + "/Pdt.G/" + reader.Item(1).ToString + "/PN.Jkt.Tim."
      Else
      kode = "01/Pdt.G/" + tahun + "/PN.Jkt.Tim."
      End If
      Return kode

      Hapus
    2. mas pas saya coba keluar error alert gini " ERROR [42000] [MySQL][ODBC 3.51 Driver][mysqld-5.5.16]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'VARCHAR(4),YEAR(GETDATE())) ORDER BY LEFT(BUKTI,2) desc' at line 1 " maksudnya apa yah? dan itu maksudnya "BUKTI" apa juga yah? terima kasih sebelumnya :D

      Hapus
    3. oh mysql ya, saya kira sqlserver...
      SELECT LEFT(BUKTI,2) AS BUKTI, YEAR(NOW()) AS TAHUN FROM TBL_TEST WHERE RIGHT(LEFT(BUKTI,13),4) = YEAR(NOW()) ORDER BY LEFT(BUKTI,2) DESC

      BUKTI ITU adalah nama kolom yg isinya "01/Pdt.G/2013/PN.Jkt.Tim."

      Hapus
    4. oh iya sampe lupa bilang pake mysql :), udah bisa nih mantab! terima kasih banyak mas :D sangat membantu ilmunya :)

      Hapus
    5. mas mau nanya lagi dong :) kalo misalnya dijadiin parameter "01" nya aja terus pas kecetak "/Pdt.G/2013/PN.Jkt.Tim." ikut keluar gimana yah caranya :) mohon pencerahannya om :)

      Hapus
    6. klo ini ceritanya panjang..

      Hapus
  40. maaf om mau tanyak, kalo diterapkan di MS Acces kok errornya di GETDATE ya om ?

    Function djie_AutoNumber() As String
    CmD = New OleDb.OleDbCommand("SELECT RIGHT(id,4) AS idop FROM siswa WHERE YEAR(LEFT(id,8))=YEAR (GATEDATE()) ORDER BY RIGHT(id,4) DESC", ConN)
    SdR = CmD.ExecuteReader
    SdR.Read()
    If SdR.HasRows Then
    Return Format(Now.Date, "yyyyMMdd") + "-000" + (Val(Trim(SdR.Item("idop").ToString)) + 1).ToString
    SdR.Close()
    Else
    Return Format(Now.Date, "yyyyMMdd") + "-0001".ToString
    End If

    End Function

    Kira2 SQLquerynya untuk MS ACCESS gimana ya om ?

    Terimakasih :D

    BalasHapus
    Balasan
    1. klo untuk ms.access itu bukan GETDATE() tapi gunakan NOW()

      Hapus
    2. Nah untuk type di DBnya pakek apa om ? apa pakek date ?

      Hapus
    3. date boleh, datetime boleh

      Hapus
    4. tapi kalo date/time, terjadi kesalahan, kayak gini,

      error to insert type date kayak gitu om

      Hapus
    5. klo my sql, pas insert nya harus dengan format yyyy-mm-dd itu paling amannya.. contoh inset into ... values ('2013-07-13',......)

      Hapus
    6. oh ya om paham berarti kesalah di format tanggalnya ya om ?

      ya om terimakasih atas waktunya :D

      Hapus
  41. apa bpk pernah buat kode sending email ke multi addreses dan multi attachment contohnya kayak slip gaji, jadi nanti slip gaji berupa pdf akan diemailkan ke masing masing pegawai secara bersamaan, tolong bantuannya ya pak, makasih

    BalasHapus
    Balasan
    1. saya blm pernah.. untuk mail via vbnet memang kebanyakan harus pake komponen dari luar (trial), jarang yg open source..
      mail server nya biasanya konek ke google atau yahoo

      Hapus
  42. Pak pernah kirim email lewat sqlserver dengan trigger, boleh tau caranya pak

    BalasHapus
  43. Mas Djie, saya buat nomor otomatis sbb :
    Nomor dengan format xxx.001 dimana xxx adalah kode barang (misal 017.001, 017.002, 049.001,049.002 dst).
    tiga digit pertama, muncul sesuai dengan inputan pada textbox.sedangkan 3 digit terakhir otomatis sesuai dengan kode barangnya. Masalahnya, tiap saya jalankan kok selalu xxx.001 dan nggak mau otomatis ke nomor selanjutnya?ini codingnya (Thanks sebelumnya):

    Private Sub AutoNomor()
    If rs.State = 1 Then rs.Close
    rs.Open ("select * from penyusutan Where (nomor2 In(Select Max(nomor2)From penyusutan)) and (left(nomor2,3)='" & txtKode.Text & "') Order By nomor2 Desc"), con
    rs.Requery
    Dim Urutan As String * 7
    Dim Hitung As Long
    With rs
    If .EOF Then
    Urutan = txtKode.Text & "." & "001"
    Text1 = Urutan
    Else
    Hitung = Right(!nomor2, 3) + 1
    Urutan = txtKode.Text & "." & Right("000" & Hitung, 3)
    End If
    Text1 = Urutan
    End With
    End Sub

    BalasHapus
    Balasan
    1. Private Sub AutoNomor()
      If rs.State = 1 Then rs.Close
      rs.Open "select right(nomor2,3) as nomor2 from penyusutan Where left(nomor2,3)='" & txtKode.Text & "' Order By right(nomor2,3) Desc", con
      rs.Requery
      Dim Hitung As Long
      With rs
      If .EOF Then
      Urutan = txtKode.Text & "." & "001"
      Text1 = Urutan
      Else
      Hitung = Val(!nomor2) + 1
      Urutan = txtKode.Text & "." & Left("000", 3 - Len(Hitung)) & Hitung
      End If
      Text1 = Urutan
      End With
      End Sub

      Hapus
    2. Makasih Mas Djie atas responnya..saya dah coba sesuai di atas, pas saya jalankan muncul pesan Error "Invalid Procedure Call or Argument" yang disorot :
      urutan = txtKode.Text & "." & Left("000", 3 - Len(Hitung)) & Hitung

      Hapus
    3. Private Sub AutoNomor()
      If rs.State = 1 Then rs.Close
      rs.Open "select right(nomor2,3) as nomor2 from penyusutan Where left(nomor2,3)='" & txtKode.Text & "' Order By right(nomor2,3) Desc", con
      rs.Requery
      Dim Hitung As String
      With rs
      If .EOF Then
      Urutan = txtKode.Text & "." & "001"
      Text1 = Urutan
      Else
      Hitung = Val(!nomor2) + 1
      Urutan = txtKode.Text & "." & Left("000", Len(Hitung)) & Hitung
      End If
      Text1 = Urutan
      End With
      End Sub

      Hapus
    4. Terima kasih banyak Mas Djie...berhasil...moga manfaat ilmunya... "Case Close"

      Hapus
  44. Mas panji maap nanya donk...

    Sub AutoNumber()
    Dim Nobar As String
    'Dim nurut As Integer = 0
    Try
    koneksi()
    Nobar = Format(Now, "dd/MM/yyyy")
    Tampil.Connection = Database
    Tampil.CommandType = "SELECT RIGHT(nurut,3) AS nurut FROM PMKS WHERE YEAR(LEFT(nurut,8))+MONTH(LEFT(nurut,8))+DAY(LEFT(nurut,8))=YEAR(GETDATE())+MONTH(GETDATE())+DAY(GETDATE()) ORDER BY RIGHT(nurut,3) DESC"
    Tampilkan = Tampil.ExecuteReader
    If Tampilkan.HasRows = True Then
    Tampilkan.Read()
    EReturn(Format(Now.Date, "yyyyMMdd") + "-" + (Val(Trim(reader.Item(0).ToString)) + 1).ToString)
    Else
    Return
    End If

    Catch ex As Exception
    MsgBox(ex.Message)
    End Try

    ini errornya "conversion from string "select right(nurut,3) as nurut F"to type"Integer'is not valid.
    mohon pencerahnya

    BalasHapus
    Balasan
    1. saya kurang faham sql nya, kenapa semua LEFT, 8 ??
      YEAR(LEFT(nurut,8))+MONTH(LEFT(nurut,8))+DAY(LEFT(nurut,8))

      saya minta contoh datanya seperti apa dan hasil nourut akhirnya (pertambanhannya) seperti apa...

      Hapus
  45. Mas the Djie maap salah kirim kata2,ini yg bener;
    Sub AutoNumber()
    Dim Nobar As String
    Dim nurut As Integer = 0
    Try
    koneksi()
    Nobar = Format(Now, "yy/mm/dd")
    Tampil.Connection = Database
    Tampil.CommandType = "select max(nurut) AS B from PMKS where left(nurut,6) ='" & Nobar & "'"

    Tampilkan = Tampil.ExecuteReader
    If Tampilkan.HasRows = True Then
    Tampilkan.Read()

    If Not DBNull(record!B) Then
    Me.txtNurut.Text = Trim(Str(Val(Trim(reader.Item(0).ToString)) + 1).ToString)
    Else
    txtNurut.Text = Nobar & "0001"
    End If
    End If
    Catch ex As Exception
    MsgBox(ex.Message)
    End Try

    Tetapi klo di VB6 saya buat Coding sepeti INi;

    Private Sub nomorbaru()
    Dim nobar As String
    nobar = Format(Date, "yymmdd")
    Query "select max(nurut) AS B from PMKS where left(nurut,6) ='" & nobar & "'"
    If Not IsNull(rec!B) Then
    txtnurut.Text = Trim(Str(Val(Trim(rec.Fields!B)) + 1))
    Else
    txtnurut.Text = nobar & "0001"
    End If
    End Sub
    == hasilnya=>"1308220001"

    Mohon pencerahannya..,Terima kasih

    BalasHapus
    Balasan
    1. Sub AutoNumber()
      Dim Nobar As String
      Dim nurut As Integer = 0
      Try
      koneksi()
      Nobar = Format(Now, "yyMMdd")
      Tampil.Connection = Database
      Tampil.CommandType = "select right(nurut) AS B from PMKS where left(nurut,6) ='" & Nobar & "'"

      Tampilkan = Tampil.ExecuteReader
      If Tampilkan.HasRows = True Then
      If Tampilkan.Read() Then
      Me.txtNurut.Text = Nobar & Mid("0000", 1, 4 - (Val(Tampilkan(0)) + 1).tostring.length) & (Val(Tampilkan(0)) + 1).tostring
      Else
      txtNurut.Text = Nobar & "0001"
      End If
      End If
      Catch ex As Exception
      MsgBox(ex.Message)
      End Try
      End Sub

      Hapus
  46. mas the jie mohon maap ganggu lagi codingnya sudah saya coba
    tetapi masih error

    ""ExecuteReader requires an open and available connection.the connection’s current state is closed"
    Padahal secara logika saya koneksi sudah benar,ato klo masih salah mohon koreksi;
    Public Sub koneksi()
    Try
    Database.Close()
    Database.ConnectionString = "Provider=SQLOLEDB.1;integrated Security=SSPI;" & _
    "Persist Security Info=False;Initial Catalog=PMKS;" & _
    "Data Source= 192.168.10.01; User Id = sa; Password = test"
    Database.Open()
    'MsgBox("koneksi berhasil") '---TEST KONEKSI---'
    Catch ex As Exception
    'MessageBox.Show("OleDb Server error # " & _
    '": " & ex.Message, ex.GetType.ToString)
    'MsgBox(ex.ToString())

    End Try

    End Sub
    End Module
    =====tetapi kalau"msgbox(ex.message)" di matikan
    aplikasi jalan akan tetapi Auto Number tidak muncul
    Mohon pencerahan nya kembali ,makhlum masih Newbie

    BalasHapus
    Balasan
    1. hmm itu mah koneksi nya,
      Sub AutoNumber()
      Dim Nobar As String
      Dim nurut As Integer = 0
      Try
      koneksi()
      Nobar = Format(Now, "yyMMdd")
      Tampil.Connection = Database
      Tampil.CommandText = "select right(nurut) AS B from PMKS where left(nurut,6) ='" & Nobar & "'"

      Tampilkan = Tampil.ExecuteReader
      If Tampilkan.Read() Then
      Me.txtNurut.Text = Nobar & Mid("0000", 1, 4 - (Val(Tampilkan(0)) + 1).tostring.length) & (Val(Tampilkan(0)) + 1).tostring
      Else
      txtNurut.Text = Nobar & "0001"
      End If
      Catch ex As Exception
      MsgBox(ex.Message)
      End Try
      End Sub

      Hapus
  47. terimakasih banyak ya mas...ats pencerahan smga bermamfaat g kt semua yg baru new bie khusus nya saya...saya coba dulu

    BalasHapus
  48. mas maap nanya lagi donk..maapp mash newbie

    apa beda MsgBox(ex.Message) dengan MsgBox(ex.ToString())

    BalasHapus
    Balasan
    1. apa beda MsgBox(ex.Message) dengan MsgBox(ex.ToString())
      ex itu object, bukan property jadi hasilnya klo ex.tostring adalah deskripsi lengkap dari object ex (exception)
      ex.message adalah, message adalh salh satu bagian/properti dari ex

      Hapus
  49. Tanya pak, saya sudah buat aplikasi dan program selalu muncul pada setiap waktu yang ditentukan, untuk saat ini saya menggunakan fasilitas windows task scheduler dan sudah berjalan normal, maunya sih schedulnya bisa include di aplikasi saya lewat program tapi saya gak tau caranya, apa bisa dibantu pak buat program task scheduler via vb.net yang langsung menjalankan program kita sesuai schedule yang ditentukan, makasih atas bantuannya pak

    BalasHapus
    Balasan
    1. bisa aja, pake 1 form + 1 timer
      nnti tentukan mau kapan/jam berapa run app nya
      untuk run app buatan mas dari form ini tinggal :
      system.diagnostics.process.start("c:\app.exe") misalnya

      Hapus
    2. saya sudah buat kayak gini pak :

      Public Class Form1
      Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
      Dim waktu As String
      waktu = DateTime.Now.ToString("ddHHmm")
      If waktu = "270821" Or "280830" Then
      Process.Start("c:\Program Files\Microsoft\KasKecilKendaraan\KasKendaraan.exe")
      End If
      End Sub
      End Class

      kalo dirunning program yang dipanggil langsung muncul aja gak pake schedule, terus menghubungkan dengan timer gimana caranya pak

      Hapus
    3. tambahkan 1 object timer.

      Public Class Form1
      Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
      Timer1.Interval = 10
      Timer1.Enabled = True
      End Sub

      Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
      Dim waktu As String
      waktu = DateTime.Now.ToString("ddHHmm")
      If waktu = "270821" Or "280830" Then
      Process.Start("c:\Program Files\Microsoft\KasKecilKendaraan\KasKendaraan.exe")
      End If
      end sub

      End Class

      Hapus
  50. Kalo dirunning program yang dipanggil muncul berulang ulang sampai tak terhingga pak, komputer langsung hang. dimana salahnya ya pak.

    BalasHapus
    Balasan
    1. yg itu udah bisa jalan ga ?
      trus klo udah bisa, kan itu cuma 2 x seminggu, dan dari 2x itupun dibagi lagi cuma 1 hari 1 x (tgl 27&28) kan ?

      Hapus
    2. klo ngehang ? ngehang pas dimananya ? pas program RUN, atau pas program KasKendaraan.exe nya RUN ?

      Hapus
  51. shcedulnya gak jalan pak, pas dirunning aplikasi yang dipanggil langsung muncul aja dan berulang ulang tak terbatas, saking banyaknya aplikasi yang muncul komputer jadi hang, untuk schedule waktu diatas masih saya kira kira pak untuk percobaan saja, mungkin nanti bisa sebulan 4 kali sesuai tanggal dan jam yang ditentukan

    BalasHapus
    Balasan
    1. udah coba yg ini blm ?

      tambahkan 1 object timer.

      Public Class Form1
      Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
      Timer1.Interval = 10
      Timer1.Enabled = True
      End Sub

      Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
      Dim waktu As String
      waktu = DateTime.Now.ToString("ddHHmm")
      select case waktu
      case "270821"
      Process.Start("c:\Program Files\Microsoft\KasKecilKendaraan\KasKendaraan.exe")

      case "280830"
      Process.Start("c:\Program Files\Microsoft\KasKecilKendaraan\KasKendaraan.exe")

      case else

      end select
      end sub

      End Class

      harunya timernya benar

      Hapus
    2. Schedulnya sudah jalan pak, namun untuk program yang dipanggil tetap berulang, sepertinya pengaruh di timer intervalnya, saya naikkan ke 5000 maka perulangannya tiap 5 detik program yang dipanggil selalu muncul lagi, akhirnya numpuk banyak, gimana ya pak caranya supaya program yang dipanggil muncul sekali saja sesuai schedulnya.

      Hapus
  52. Saya siasati dengan tambahan perintah close() di casenya, sehingga saat program yang dipanggil pertama kali muncul, program schedulnya langsung tertutup sehingga tidak terpengaruh timer intervalnya dan aplikasi yang dipanggil muncul cuman satu saja. Persoalannya tujuan saya buat program schedul ini untuk memanggil app.exe saya secara otomatis sesuai schedule tanpa bantuan window task scheduler, sedangkan ini utk memanggil app.exe, program shedule harus jalan dulu dan akhirnya memanfaatkan window task scheduler lagi, jadi gimana dong pak supaya tanpa memanfaatkan task di window, app.exe bisa langsung terpanggil

    BalasHapus
  53. Siang mas Pandji, mohon solusinya mas, ini coding sy, sudah running dan muncul, tapi saat saya mau menambahkan data lagi gak-bisa-bisa alias langsung error , cuma bisa pas pertama tambah data aja :(. sy pake database access.

    Function nadia_AutoNumber() As String

    Dim kode As String

    kode = "SELECT RIGHT(no_srt_kmt,3) AS no_srt_kmt FROM surat_kematian WHERE YEAR(LEFT(no_srt_kmt,8))=YEAR(#" & Now() & "#) ORDER BY RIGHT(no_srt_kmt,3) DESC"
    Dim acscmd As New OleDb.OleDbCommand
    acscmd.CommandText = kode
    acscmd.Connection = conaccess
    conreader = acscmd.ExecuteReader

    If conreader.HasRows Then
    conreader.Read()
    Return "SKDC" + Format(Now, "yyyyMMdd") + (Val(Trim(conreader.Item(0).ToString)) + 1).ToString
    Else
    Return "SKDC" + Format(Now, "yyyyMMdd") + "001"
    End If

    End Function

    mohon bantuan nya ya mas..

    BalasHapus
    Balasan
    1. coba ubah bagian ininya :
      If conreader.Read() then
      Return "SKDC" + Format(Now, "yyyyMMdd") + mid("000",1,3 - (Val(Trim(conreader.Item(0).ToString)) + 1).ToString.Length) + (Val(Trim(conreader.Item(0).ToString)) + 1).ToString
      Else
      Return "SKDC" + Format(Now, "yyyyMMdd") + "001"
      End If

      Hapus
    2. terima kasih mas, ud sy coba, pesan errornya begini : " data type mismatch in criteria expression " , type data di access nya text, sy coba ganti type data Date/Time di access nya, tetep ga muncul saat penambahan data kedua, tp pas input data pertama kali bisa. *bingung mas *

      mohon pencerahannya .....

      Hapus
    3. itu muncul errornya di mana ? sintak
      yg di higlight warna kuning-nya sebelah mana ?

      Hapus
    4. di sini mas :

      conreader = acscmd.ExecuteReader

      pas di bagian ini hightlight kuningnya,

      Hapus
    5. coba ini sql nya :

      SELECT RIGHT(no_srt_kmt,3) AS no_srt_kmt FROM surat_kematian WHERE left(right('no_srt_kmt',11),4) = year(now()) ORDER BY RIGHT(no_srt_kmt,3) DESC

      Hapus
    6. Mas Pandji..... saya udah coba sql yang mas berikan, alhamdulillah sudah bisa run dan bisa di save tanpa ada error, tapi pas input data kedua nomor urut yang paling belakang tetap 001 mas, maaf banyak nanya ya Mas Pandji. Mohon bantuannya.

      Hapus
    7. berarti itu tidak READ,
      jadi masuk nya ke ELSE terus,
      harus cek datanya..
      saya mau tanya, yg disimpan ke database itu, contoh :
      "SKDC20130801001"
      atau tanpa SKDC ?
      "20130801001"

      Hapus