Hai Adi,

> field waktu tidak dapat menampilkan format waktu di excel
>> Tipe data tabel di db untuk field waktu apa ya...
Biasanya hasil copyfromrecordset akan tampil di-Excel sesuai tipe datanya.
Apakah tipe data field waktu bukan datetime ?
Jika bukan datetime, bagaimana format penulisan waktu dalam field waktu
tersebut ? (umumnya ditulis dengan format HH:mm:ss)
Bagaimana jika field tanggal dan field waktu dijadikan satu menjadi field
waktu_ujian dengan tipe data datetime ?

btw, lepas dari semua itu. *
Anggap saja tipe data field waktu dalam db bukanlah bertipe datetime tapi
dalam format waktu HH:mm:ss* dan nama-nama fieldnya adalah
ID,Tanggal,Waktu,NoUjian,Nama,Kelas,Materi,Jawaban1,jawaban2,jawaban3...\dst
serta tetap ingin menggunakan methods copyfromrecordset, coba querynya
diubah menjadi : (query untuk ms access)
SELECT ID,Tanggal,*CDate(*Waktu*) as
jam*,NoUjian,Nama,Kelas,Materi,Jawaban1,jawaban2,jawaban3...,dst

FROM Jawaban

Jika akan menggunakan loop dalam menulis ke setiap cell Excel, maka query
masih bisa dengan :
SELECT * FROM Jawaban
kemudian loop dari record pertama sampai record terakhir (EOF)
yang didalamnya menulis semua field per record yang diproses oleh loop.
Jika Excel tetap tidak langsung mengkonversi tipe data field waktu menjadi
bertipe datetime dalam cell, maka lakukan konversi tipe data pada nilai
waktu.
Kira-kira bunyinya seperti ini :

Dim sSQL As String
Dim rs As ADODB.Recordset
Dim cn As ADODB.Connection
dim lRowOffset as long, lColOffset as long, lFields as long
dim rngAnchor as range

'misal hasil query ditulis di sheet bernama Answer dengan header terkiri di
A1
set rngAnchor=sheets("Answer").range("a1")

Set cn = New ADODB.Connection

cn.Open "Provider=Microsoft.ACE.OLEDB.
12.0;Data Source=" &
Environ("UserProfile") & "\Desktop\jwb.accdb;Persist Security
Info=False"

Set rs = New ADODB.Recordset

sSQL = "Select * from Jawaban"

rs.Open sSQL, cn, adOpenKeyset, adLockOptimistic

if rs.recordcount>0 then
    lrowoffset=1
    rs.movefirst
    lfields=rs.fields.count -1 'index field adalah base 0
    do while not rs.eof
          with rnganchor
                  for lcoloffset=0 to lfields
                        .offset(lrowoffset,lcoloffset).value =
rs.fields(lcoloffset).value
                  next lcoloffset
          end with
          lrowoffset=lrowoffset+1
          rs.movenext
    loop
endif

rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing

> ujian semester menggunakan Excel 2007. ketika menekan tombol selesai,
data jawaban akan tersimpan ke table jawaban.
siswanya berjumlah 700 orang. 1 materi saja mempunyai 50 soal. Fields :
ID,Tanggal,Waktu,NoUjian,Nama,Kelas,Materi,Jawaban1,jawaban2,jawaban3...\dst
>> Biasanya, untuk database yang ingin menampung data seperti demikian,
setidaknya akan dibagi menjadi 3 tabel, yaitu :
1. Tabel siswa (NoIndukSiswa,Nama,Kelas,no_ujian)
2. Tabel ujian (IDMateri,Materi,Kelas,TglUjian)
3. Tabel jawaban (noUjian,IDMateri,NoIndukSiswa,TglKumpul,NoSoal,Jawaban)
Kunci jawaban disimpan dengan NoUjian 0.
Komputasi mengkalkulasi nilai jawaban bisa dilakukan dengan klausa JOIN
Komputasi menyusun data source untuk output (fact table) juga disusun
dengan klausa JOIN
Biasanya menampilkan jawaban para siswa beserta nilai masing-masing
dilakukan per materi dan jarang untuk seluruh materi sekaligus.

asumsi ada 20 materi per kelas dan ada 100 kelas dengan ujian per materi
sebanyak 5 kali dalam 2 semester, akan ada 700M record.
Kadang data seperti tabel jawaban dibagi menjadi data per kelas per
semester (andai database engine tidak memiliki kemampuan membuat partisi
data).
Maka jumlah record sekitar 3.5M. Sepertinya MS Access masih mampu untuk
record sebanyak 3.5M
Excel dengan 1M baris per sheet, digunakan untuk menampilkan output per
materi. Andai saja juga ditampilkan per ujian, maka jumlah record sekitar
35K.
Seluruh proses komputasi diusahakan dilakukan pada sisi database dan
sesedikit mungkin yang dikomputasi oleh Excel.

Andai field dibuat berorientasi horisontal seperti yang ada sekarang,
komputasi yang dilakukan disisi database akan membutuhkan kalimat query
yang relatif panjang.

Wassalam,
Kid.


2012/12/25 Adi <[email protected]>

> **
>
>
> Sebenarnya database access ini bertujuan untuk menampung jawaban
> santriwati di pondok saya yang ujian semester menggunakan Excel 2007.
> Setiap santriwati ketika menekan tombol selesai, data jawaban mereka
> akan tersimpan ke table jawaban.
> kalau jawaban dibuat menjadi record tersendiri, dapat dibayangkan berapa
> record yang akan terbentuk jika siswanya berjumlah 700 orang. padahal 1
> materi saja mempunyai 50 soal.
>
> lebih lengkapnya desain field table jawaban seperti ini:
> ID,Tanggal,Waktu,NoUjian,Nama,Kelas,Materi,Jawaban1,jawaban2,jawaban3...\
> dst
>
> Izinkan saya untuk bertanya lagi Mr... sya menulis kode berikut untuk
> mengambil kembali data yang ada di access ke excel menggunakan
> copyfromrecordset. yang jadi masalah adalah, field waktu tidak dapat
> menampilkan format waktu di excel, hanya tanggal saja yang ada di field
> waktu.
> Minta pencerahannya...wassalam.
>
> Sub DapatkanData()
>
> Dim sSQL As String
> Dim rs As ADODB.Recordset
> Dim cn As ADODB.Connection
>
> Set cn = New ADODB.Connection
>
> cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" &
> Environ("UserProfile") & "\Desktop\jwb.accdb;Persist Security
> Info=False"
>
> Set rs = New ADODB.Recordset
>
> sSQL = "Select * from Jawaban"
>
>
> rs.Open sSQL, cn, adOpenKeyset, adLockOptimistic
>
> Cells(5, 2).CopyFromRecordset rs
>
>
> rs.Close
> Set rs = Nothing
> cn.Close
> Set cn = Nothing
> End Sub
>
> --- In [email protected], "Mr. Kid" wrote:
> >
> > Oh gitu.
> >
> > Maksud saya, kenapa tabel tidak dibuat berupa 2 kolom bernama Nomor
> > (kolom1) dan jawab(kolom2).
> > Jadi data setiap nomor akan jadi 1 record alias sekali input akan ada
> > penambahan 50 record.
> >
> > Wassalam,
> > Kid.
> > On Dec 25, 2012 9:18 AM, "Adi" abduhsuryadi@... wrote:
> >
> > > **
>
> > >
> > >
> > > kalau yang itu, sudah saya coba pak,dan alhmdlillah sukses. kodenya
> > > seperti ini:
> > >
> > > dim myField as String
> > > dim myInt as Integer
> > >
> > > With rs
> > > .AddNew
> > >
> > > For myInt = 1 To 50
> > > myField = myField & IIf(IsNull(Range("F" & myInt)) Or Range("F" &
> myInt) =
> > > "", "0", Range("F" & myInt))
> > > Next
> > >
> > > .Fields("Jawaban") = myField
> > > .Update
> > > End With
> > >
> > > --- In [email protected], "Mr. Kid" mr.nmkid@ wrote:
> > > >
> > > > Sama-sama.
> > > >
> > > > Kalau boleh bertanya, apakah mungkin jika tabelnya diubah menjadi
> > > memiliki
> > > > kolom Nomor dan Jawaban (2 kolom) saja ?
> > > >
> > > > Wassalam,
> > > > Kid.
> > > >
>
>  
>

Kirim email ke