Arsip: program multi user (duplicate primary key)

 
user image
more 12 years ago

ricky_seldjatem

hallo... para master dephi. saya sedang membuat program kepegawaian multi user dengan delphi 7 dan sql server 2000. namun saya mengalamai kendala pada saat ketika program data pegawai diinput pada saat yang bersamaan oleh 2 user, dimana untuk nomor pegawai saya buat otomatis. masalahnya pd saat tombol tambah ditekan dua2nya memiliki nomor pegawai yg sama, mis : P001, ini mengakibatkan duplikat primary key. nah bagaimana caranya ketika user 1 tekan tombol tambah P001 dan user 2 = P002 (sementara masih dalam proses input data / data belum disimpan oleh salah satu user) pada saat yg bersamaan agar data tersebut bisa disimpan ? terima kasih atas bantuannya
user image
more 12 years ago

Manz

IMHO, lebih baik sih untuk key tersebut dibuatkan triggernya, jadi dalam server pasti ada perbedaan waktu meskipun hanya milisecond dalam proses saving nya... just imho :mrgreen:
user image
more 12 years ago

ricky_seldjatem

Kang Manz tolong kita dong contoh konkritnya. sebelumnya terima kasih atas bantuannya
user image
more 12 years ago

andrewblack

kalau di bikinkan logbook? dibikinkan tabel khusus untuk nomor terakhir, sebelum menambah record minta data terakhir di logbook.
user image
more 12 years ago

imunk

@ricky_seldjatem proses simpan data menggunakan apa, query kah (insert into....) , table kah (table1.post), stored procedure kah (tau ndiri lah)... ?? masing2 punya caranya sendiri2.
user image
more 12 years ago

ricky_seldjatem

procedure TFPegawai.SaveData; begin FrMenu.ADOCommand1.CommandText:='insert into pegawai values ('''+(nopeg.Text)+''','''+(nama.Text)+''','''+(alamat.Text)+''')'; FrMenu.ADOCommand1.Execute; end
user image
more 12 years ago

imunk

hmmm... kalo aku gak salah tangkep (emang ayam ditangkep..:) ) nopeg itu menyimpan nomor pegawai kayak P001,P002, dst (halah emang iya liat aja namanya, kekeke...) terus di atas bilangnya tuh nomor otomatis, berarti saat simpan data (atao saat loading formnya mungkin) program akan memunculkan nomor pegawai terakhir plus satu. jika benar, mungkin usul dari @andrewblack bisa dipake.
user image
more 12 years ago

ricky_seldjatem

betul sekal kang imunk, nah contoh konkritnya kang andrew black iyu seperti gimana ya (logbook), soalnya saya baru belajar delphi, inipun proyek pertama saya kang. terima kasih atas bantuannya. nah ini function penomoron otomatisnya untuk nomor pegawai : function TFPegawai.GetID: string; begin try FrMenu.ADOQuery.Close; except end; FrMenu.ADOQuery.SQL.Text := 'select nopeg from pegawai where nopeg like ''PEG' + '' + FormatDateTime('yy',Now) + FormatDateTime('MM',Now) +'' + '%'' order by nopeg'; FrMenu.ADOQuery.Open; if FrMenu.ADOQuery.RecordCount > 0 then begin FrMenu.ADOQuery.RecNo := FrMenu.ADOQuery.RecordCount; Result := 'PEG' + FormatDateTime('yy',Now) + FormatDateTime('MM',Now) + FormatFloat('000',StrToInt(Copy(FrMenu.ADOQuery.Fields[0].AsString,8,3)) + 1); end else Result := 'PEG' + FormatDateTime('yy',Now) + FormatDateTime('MM',Now) + '001'; end;
user image
more 12 years ago

imunk

hmm.... @andrewblack mungkin bisa ngejelasin lebih rinci yg dimaksud. @ricky_seldjatem kalo menurutku sih kayak gini: buat satu tabel (t_nourut) dg satu field (nopeg) tipe integer.

function TFPegawai.GetID: string;
begin
try FrMenu.ADOQuery.Close; except end;
FrMenu.ADOQuery.SQL.Text := 'select nopeg from t_nourut';
FrMenu.ADOQuery.Open;
if FrMenu.ADOQuery.RecordCount > 0 then
begin
FrMenu.ADOQuery.RecNo := FrMenu.ADOQuery.RecordCount;
Result := 'PEG' + FormatDateTime('yy',Now) + FormatDateTime('MM',Now) + FormatFloat('000',FrMenu.ADOQuery.Fields[0].AsFloat);
//Query baru utk mengupdate tabel t_nourut
ADOQuery1.SQL.Text:='Update t_nourut set nopeg = nopeg + 1';
ADOQuery1.ExecSQL;
//-------------------------------------------------
end
else
Result := 'PEG' + FormatDateTime('yy',Now) + FormatDateTime('MM',Now) + '001';
//Query baru utk mengupdate tabel t_nourut
ADOQuery1.SQL.Text:='Insert into t_nourut values(1)';
ADOQuery1.ExecSQL;
//-------------------------------------------------
end;
gitu kira2, mudah2an membantu. maaf kalo salah aku belum coba sih... :)
user image
more 12 years ago

ricky_seldjatem

terima kasih kang sebelumnya. cuma maksud saya bagaimana caranya pada saat user A (Komputer1) dan user B (komputer2) membuka form yang sama misalnya form input data pegawai pada saat yang bersamaaan, tetapi user a menekan tombol tambah lebih cepat berapa milisecond dari user B menekan tombol tambah sehingga nomor pegawai user A = PEG0807001 dan user B = PEG0807002. karena program saya pada saat ini ketika kedua user membuka form input data pegawai secara bersamaan user a dan user b menekan tombol tambah walaupun berbeda berapa milisecond maka nomor pegawai yang ada pada edit box kedua user tersebut berisi kode pegawai yang sama misalnya = PEG0807001 tabel pegawai nopeg nvarchar 10 nama varchar 50 alamat nvarchar 150 atas bantuannya terima kasih
more ...
  • Pages:
  • 1
  • 2
Share to

Random Topic

Local Business Directory, Search Engine Submission & SEO Tools FreeWebSubmission.com SonicRun.com