Alhamdulillah...

*" ternyata sudah bisa jalan dan tak perlu pikir type data"*
>> Oh ya ? *bekerja dengan database tidak perlu memikirkan tipe data ?*ciiyuuzz 
>> ?
>> Bagaimana jika pada script :
REF = .Cells(X, 1).Value
RS.Open "select * from P1 Where P1.REF=*" & REF*, CON, adOpenKeyset,
adLockOptimistic
If RS.RecordCount = 0 Then
   RS.AddNew
   RS.Fields(0).Value = .Cells(X, 1).Value
   RS.Fields(1).Value = .Cells(X, 2).Value
   RS.Fields(2).Value = .Cells(X, 3).Value
   RS.Fields(3).Value = .Cells(X, 4).Value
   RS.Fields(4).Value = .Cells(X, 5).Value
   RS.Fields(5).Value = .Cells(X, 6).Value
   RS.Fields(6).Value = .Cells(X, 7).Value
   RS.Fields(7).Value = .Cells(X, 8).Value
   RS.Fields(8).Value = .Cells(X, 9).Value
   RS.Fields(9).Value = .Cells(X, 10).Value
   RS.Fields(10).Value = .Cells(X, 11).Value
   RS.Update
End If

bagian yang dilatar kuning Anda ganti dengan yang ada pada script yang Anda
anggap bermasalah membuat muncul error yang berbunyi :
RS.Open "select * from P1 WHERE P1.REF=*'" & REF & "'"*, CON, adOpenKeyset,
adLockOptimistic
Apakah tetap tidak memikirkan datatype dengan AddNew dan Update ?

Jadi permasalah utama bukan masalah menggunakan AddNew atau Execute, tapi
masalah utama adalah cara menyusun query yang ndak peduli dengan tipedata.

*"Tapi kalau data mencapai 3000an record kok agak lama," *
>> Bagaimana jika ditelaah berdasar apple to apple dari 2 prosedur
tersebut, yaitu prosedur yang pakai con.execute dengan yang pakai addnew.

Baris pakai con.execute berbunyi :
CON.Execute sQuery

itu sama dengan :
RS.AddNew
RS.Fields(0).Value = .Cells(X, 1).Value
RS.Fields(1).Value = .Cells(X, 2).Value
RS.Fields(2).Value = .Cells(X, 3).Value
RS.Fields(3).Value = .Cells(X, 4).Value
RS.Fields(4).Value = .Cells(X, 5).Value
RS.Fields(5).Value = .Cells(X, 6).Value
RS.Fields(6).Value = .Cells(X, 7).Value
RS.Fields(7).Value = .Cells(X, 8).Value
RS.Fields(8).Value = .Cells(X, 9).Value
RS.Fields(9).Value = .Cells(X, 10).Value
RS.Fields(10).Value = .Cells(X, 11).Value
RS.Update
Banyak mana prosesnya ?

Lihat bagian yang *dibiru* *ditambah dengan penyusunan query oleh data
provider* itu sama dengan prosedur dengan con.execute bagian :
For Each TEKS1 In .Range(.Cells(X, 1).Address & ":" & .Cells(X, 11).Address)
           select case teks1.column
           case 4,5  'tipe datetime
               teks1="#" & format$(teks1,"YYYY-MM-DD") & "#"
         case 3,11  'tipe string
               teks1="'" & teks1 & "'"
          case else 'numerik'
              teks1=clng(0 & teks1)
          end select
          teks=teks & "," & teks1
  Next
  teks=mid$(teks,2)
  sQuery = "Insert Into P1 (
REF,JOB,MACHINE,START,STOP,DOWNTIME,GLD,PK,QTY,KA,REMARK ) select " & TEKS
  RS.Open "select * from P1 Where P1.REF=*" & REF*, CON, adOpenKeyset,
adLockOptimistic
        If RS.RecordCount = 0 Then
            CON.Execute sQuery
        End If
*penyusunan query oleh data provider* dilakukan sangat cepat oleh data
provider, lebih cepat dari baris :
sQuery = "Insert Into P1 (
REF,JOB,MACHINE,START,STOP,DOWNTIME,GLD,PK,QTY,KA,REMARK ) select " & TEKS

*Tapi bagian :*
RS.Fields(0).Value =
RS.Fields(1).Value =
RS.Fields(2).Value =
RS.Fields(3).Value =
RS.Fields(4).Value =
RS.Fields(5).Value =
RS.Fields(6).Value =
RS.Fields(7).Value =
RS.Fields(8).Value =
RS.Fields(9).Value =
RS.Fields(10).Value =
diproses *jauh lebih lambat *dibanding :
For Each TEKS1 In .Range(.Cells(X, 1).Address & ":" & .Cells(X, 11).Address)
           select case teks1.column
           case 4,5  'tipe datetime
               teks1="#" & format$(teks1,"YYYY-MM-DD") & "#"
         case 3,11  'tipe string
               teks1="'" & teks1 & "'"
          case else 'numerik'
              teks1=clng(0 & teks1)
          end select
          teks=teks & "," & teks1
  Next
  teks=mid$(teks,2)

*Bagian :*
rs.addnew
dan
rs.update
diproses sangat-sangat jauh lebih lambat dibanding :
CON.Execute

*"apakah ada yg perlu diperbaiki "*
>> ndak ada. memang demikianlah karakteristik operasi recordset per record
berbasis field per field.

Wassalam,
Kid.

2012/12/20 Heru Safrudin <[email protected]>

> **
>
>
> Dear Mr. Kid
>
> Alhamdulillah ternyata banyak jalan menuju keberhasilan setelah pake
> cara yang dari Mr. Kid yang lain yaitu RS.AddNew, ternyata sudah bisa
> jalan dan tak perlu pikir type data, bahkan tidak perlu validasi. Tapi
> kalau data mencapai 3000an record kok agak lama, apakah ada yg perlu
> diperbaiki dari prosedur di bawah ini :
>
> ConnectDB
> With Sheets("P1")
> For X = 2 To 10 ' .Range("A1").CurrentRegion.Rows.Count
> REF = .Cells(X, 1).Value
> RS.Open "select * from P1 Where P1.REF=" & REF, CON,
> adOpenKeyset, adLockOptimistic
> If RS.RecordCount = 0 Then
> RS.AddNew
> RS.Fields(0).Value = .Cells(X, 1).Value
> RS.Fields(1).Value = .Cells(X, 2).Value
> RS.Fields(2).Value = .Cells(X, 3).Value
> RS.Fields(3).Value = .Cells(X, 4).Value
> RS.Fields(4).Value = .Cells(X, 5).Value
> RS.Fields(5).Value = .Cells(X, 6).Value
> RS.Fields(6).Value = .Cells(X, 7).Value
> RS.Fields(7).Value = .Cells(X, 8).Value
> RS.Fields(8).Value = .Cells(X, 9).Value
> RS.Fields(9).Value = .Cells(X, 10).Value
> RS.Fields(10).Value = .Cells(X, 11).Value
> RS.Update
> End If
> RS.Close
> Next
> End With
> DisconnectDB
>
> Thanks so much Mr. ...........
>
> Pada tanggal 20/12/12, Heru Safrudin <[email protected]> menulis:
>
> > Ya kalau begitu saya sok tahu banget setidaknya tentang type data, karena
> > udah merasa type data di REF dan lainnya udah sama, tapi kalau ternyata
> > belum sama ya mesti tanya ke siapa lagi ya.... atau Mr. punya referensi
> > bacaan ttg data type ? Makasih banyak
> >
> > 1534,200001,'A1',#2012-01-02#,#2012-01-02#,0,150,792,19858,30,''
> > nyerah deh kayaknya
> >
> >
> >
> > Pada 20 Desember 2012 08:50, Mr. Kid <[email protected]> menulis:
> >
> >> **
>
> >>
> >>
> >> Tuh kan...
> >>
> >> Kalau begitu, coba pahami tentang tipe data (data type) lagi. Mulai dari
> >> apa itu datatype, guna, cara pilih, batasan tipe data, hubungan antar
> >> data
> >> type, akibat perbedaan data type, data type dalam db (mis access aja
> >> dulu).
> >>
> >> Setelah itu baru tentang penyusunan query dan dampak perbedaan data type
> >> dalam query.
> >>
> >> Inti permasalahan masih tentang data type.
> >>
> >> Coba cari tahi, di db kolom ref datatype nya apa. Kalau sudah dapat, cek
> >> di query nya si data type itu dikenai proses terhadap data type apa.
> Ubah
> >> agar sama datatypenya mengikuti yang di db.
> >>
> >> Kalau belum bersedia mendalami datatype, maka cenderung muncul error
> >> query
> >> akibat datatype.
> >>
> >> Wassalam,
> >> Kid.
> >> On Dec 20, 2012 8:40 AM, "Heru Safrudin" <[email protected]> wrote:
> >>
> >>> **
>
> >>>
> >>>
> >>> Capture Error type mismatch.JPG
> >>>
> >>>
> >>> Pada 19 Desember 2012 18:59, Mr. Kid <[email protected]> menulis:
> >>>
> >>>> **
>
> >>>>
> >>>>
> >>>> waduh masih error ya...
> >>>> masih belum sempet buka file nih...
> >>>>
> >>>> kira-kira yang bikin error bagian mana ?
> >>>> Jangan-jangan yang baris RS.open blablabla
> >>>>
> >>>>
> >>>> Kid.
> >>>>
> >>>> 2012/12/19 Heru Safrudin <[email protected]>
> >>>>
> >>>>> **
>
> >>>>>
> >>>>>
> >>>>> Dear Mr.Kid
> >>>>>
> >>>>> Karena putus asa itu dosa, terpaksa saya kuatkan hati dan beranikan
> >>>>> diri untuk terus bertanya.
> >>>>> Instruksi Mr. sudah saya laksanakan tapi belum berjalan seperti yg
> >>>>> diharapkan
> >>>>> Apalagi yang masih salah ? file terlampir
> >>>>>
> >>>>> Semoga Allah SWT memberi petunjuk dan pertolongan pada orang yg
> >>>>> memberi
> >>>>> pertolongan
> >>>>> وَالسَّلَامُ عَلَيْكُمْ وَرَحْمَةُ اللهِ وَبَرَكَاتُهُ
> >>>>>
> >>>>>
> >>>>> Pada 19 Desember 2012 12:35, Mr. Kid <[email protected]> menulis:
> >>>>>
> >>>>> **
>
> >>>>>>
> >>>>>>
> >>>>>> Maaf belum sempat lihat langsung dalam file.
> >>>>>>
> >>>>>> Pokok permasalahannya adalah bagaimana cara Anda menyusun query.
> >>>>>> Setiap field yang nilai blank di worksheet :
> >>>>>> 1. harus jadi 0 ketika dimasukkan ke field db bertipe numerik
> >>>>>> 2. boleh tetap nullstring '' jika field db bertipe text (string)
> >>>>>>
> >>>>>> Coba pada blok kondisi dalam for each teks1 blabla
> >>>>>> diubah jadi :
> >>>>>> select case teks1.column
> >>>>>> case 4,5 'tipe datetime
> >>>>>> teks1="#" & format$(teks1,"YYYY-MM-DD") & "#"
> >>>>>> case 3,11 'tipe string
> >>>>>> teks1="'" & teks1 & "'"
> >>>>>> case else 'numerik'
> >>>>>> teks1=clng(0 & teks1)
> >>>>>> end select
> >>>>>> teks=teks & "," & teks1
> >>>>>>
> >>>>>> kemudian bagian replace teks yag tadinya berbunyi :
> >>>>>> teks=replace( blabla )
> >>>>>> diganti menjadi :
> >>>>>> teks=mid$(teks,2)
> >>>>>>
> >>>>>> Wassalam,
> >>>>>> Kid.
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>
> >>>
> >>>
> >>> --
> >>> Regards,
> >>>
> >>> Heru Safrudin
> >>>
> >>>
> >>>
> >>
> >
> >
> >
> > --
> > Regards,
> >
> > Heru Safrudin
> >
>
> --
> Regards,
>
> Heru Safrudin
>
>  
>

Kirim email ke