Arsip: Langkah Apa Saja Untuk Membuat Update-an DB MySQL?

 
user image
more 13 years ago

babypigs

mohon saran dan bantuan teman2 sekalian ... sedikit cerita pembukaan dulu, saya sedang membuat program untuk perusahaan tempat saya bekerja sekarang, menggunakan Delphi 7 + Zeos dan databasenya MySQL 5. program yang sudah saya buat sudah berjalan normal dan sudah dipakai oleh beberapa anak perusahaan tempat saya bekerja. program yang saya buat selalu ada penambahan modul sesuai permintaan dari user rata2 satu minggu akan ada satu penambahan modul program. setiap ada penambahan modul kadang disertai penambahan tabel baru, field baru, juga beberapa isi record baru. dan setelah modul jadi saya harus mengupdate ke semua anak perusahaan saya. selama ini saya harus benar2 mencatat tabel2 baru apa saja harus saya tambahkan. field baru apa saja yg harus saya tambahkan ke tabel yg sudah ada, record baru apa saja yg harus saya tambahan untuk mendukung modul baru, dan semua benar saya kerjakan manual dan memakan waktu dan tenaga. soalnya saya tidak ingin menganggu record transaksi yang sudah berjalan sekarang. saya pernah menggunakan fasilitas backup dan restore mysqldump tapi tidak begitu membantu malah sering terjadi record transaksi yang sudah ada menjadi hilang. yang ingin saya tanya langkah2 apa saja yg harus dilakukan untuk mengupdate database mysql yang sudah berjalan tanpa menganggu record transaksi yang sudah ada, pada kondisi antara lain: - penambahan tabel baru - penambahan field baru ke tabel yg sudah ada - penambahan record baru saya menginginkan semua nya dilakukan dalam satu modul update yang dibuat dengan Delphi, jadi hanya dengan satu tombol saja saya bisa melakukan semua pengupdate-an tanpa menganggu record2 yg sudah ada. sebelum dan sesudahnya saya ucapkan banyak terimakasih ...
user image
more 13 years ago

mas_kofa

Pake create dan alter mas?
user image
more 13 years ago

DelphiExpert

Mungkin yang diinginkan batch sql script. Buat script yg hendak dieksekusi, misal: update092011.sql, isinya: 1. CREATE TABLE XXX IF NOT EXISTS ... // Create table baru 2. ALTER TABLE XXX ... // Tambah field ke existing table 3. INSERT INTO XXX ... // Penambahan record baru Nah setelah itu lakukan testing internal ke database dummy / replika / development. Setelah OK, tinggal eksekusi script tersebut di masing2 cabang... Caranya? 1. Manual menggunakan MS-SQL admin lewat remote desktop atau sejenisnya 2. Tambahkan modul / fungsi khusus di aplikasi cabang untuk mengeksekusi sql script. File sql script dapat di bagikan* ke cabang dengan berbagai macam cara, misal cek & download dari FTP/HTTP server secara berkala dll, tentu disertai dengan info metadata atau hash agar tidak dieksekusi lebih dari sekali. Seingat saya Zeos memiliki komponen yg namanya TZScript (atau sejenisnya, lupa)
user image
more 13 years ago

babypigs

@DelphiExpert: Mungkin yang diinginkan batch sql script. Buat script yg hendak dieksekusi, misal: update092011.sql, isinya: 1. CREATE TABLE XXX IF NOT EXISTS ... // Create table baru 2. ALTER TABLE XXX ... // Tambah field ke existing table 3. INSERT INTO XXX ... // Penambahan record baru Nah setelah itu lakukan testing internal ke database dummy / replika / development. Setelah OK, tinggal eksekusi script tersebut di masing2 cabang... Caranya? 1. Manual menggunakan MS-SQL admin lewat remote desktop atau sejenisnya 2. Tambahkan modul / fungsi khusus di aplikasi cabang untuk mengeksekusi sql script. File sql script dapat di bagikan* ke cabang dengan berbagai macam cara, misal cek & download dari FTP/HTTP server secara berkala dll, tentu disertai dengan info metadata atau hash agar tidak dieksekusi lebih dari sekali. Seingat saya Zeos memiliki komponen yg namanya TZScript (atau sejenisnya, lupa)
terimakasih banget untuk pencerahannya ... dari petunjuk di atas saya membuat satu modul untuk update, yaitu membaca skrip sql dari file text. ada sedikit masalah dalam pembacaan skrip sql dari file text ini, yaitu jika dalam file text cuma ada satu skrip sql saja modul dapat berhasil melakuakan eksekusi perintah sql tersebut, tapi jika ada dua atau lebih perintah sql maka modul gagal melakukan eksekusi perintah sql yang kedua dan seterusnya. yang menjadi pertanyaan bagaimana cara penulisan skrip sql dalam file text, saya sudah menulis antar perintah berikutnya saya beri ; tapi modul selalu gagal membaca perintah kedua. begitu pula bagaimana syntax pembacaan file text dari Delphi saat ini saya menggunakan SQL.LoadFromFile saja. qUpdate.SQL.Clear; qUpdate.SQL.LoadFromFile('./Update/update.txt'); qUpdate.ExecSQL; terimakasih sebelumnya ...
user image
more 13 years ago

mas_kofa

jangan pake ExecSQL mas,... tp pake BatchSQL.......
user image
more 13 years ago

babypigs

@mas_kofa: jangan pake ExecSQL mas,... tp pake BatchSQL.......
terimakasih buat info nya ... saya sudah mencoba untuk pengecekan table sudah ada atau belom tidak masalah, lalu untuk pembuatan table baru juga tidak masalah, yg sedikit jadi masalah pengecekan field sudah ada atau belom, dari hasil hunting di google saya menemukan skrip seperti ini: IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = ‘TEST’ AND COLUMN_NAME = ‘TEST_DATE’) BEGIN ALTER TABLE TEST ADD TEST_DATE DATETIME END cuma setelah dicoba ternyata masih ada error, dan kalau dilihat hanya untuk memeriksa satu field saja lumayan juga kalau saya punya beberapa field baru yang harus dicek. saya pernah membaca juga permasalahan ini di threadnya @mas_kofa cuma harus melakukan pengecekan kembali dengan bantuan delphi, apakah ada skrip alternatif untuk mengecek field yang sudah ada atau belum via skrip sql dan tidak bolak balik harus mengecek lewat delphi. terimakasih ...
user image
more 13 years ago

mas_kofa

kalo solusi yg pernah saya pake seh........ 1. kita buat suatu stored Procedure buat AddColumn terlebih dahulu [sql] DELIMITER $$ CREATE PROCEDURE nama_database.AddColumnUnlessExists(IN dbName TINYTEXT, IN tableName TINYTEXT, IN fieldName TINYTEXT, IN fieldDef TEXT) BEGIN IF NOT EXISTS ( SELECT * FROM information_schema.COLUMNS WHERE column_name=fieldName AND table_name=tableName AND table_schema=dbName ) THEN SET @ddl=CONCAT('ALTER TABLE ',dbName,'.',tableName, ' ADD COLUMN ',fieldName,' ',fieldDef); PREPARE stmt FROM @ddl; EXECUTE stmt; END IF; END$$ DELIMITER ; [/sql] 2. Selanjut nya kita tinggal pake / panggil ja stored Procedure itu... [sql] CALL AddColumnUnlessExists(DATABASE(), 'tblproduct', 'new_field', 'varchar(32) null'); CALL AddColumnUnlessExists(DATABASE(), 'tblproduct', 'new_again', 'DATETIME'); [/sql] Note : DATABASE() : adalah current database..... S'Moga Sukses.......
user image
more 13 years ago

babypigs

[quote:9ed716bc8a="mas_kofa"]kalo solusi yg pernah saya pake seh........ 1. kita buat suatu stored Procedure buat AddColumn terlebih dahulu [sql] DELIMITER $$ CREATE PROCEDURE nama_database.AddColumnUnlessExists(IN dbName TINYTEXT, IN tableName TINYTEXT, IN fieldName TINYTEXT, IN fieldDef TEXT) BEGIN IF NOT EXISTS ( SELECT FROM information_schema.COLUMNS WHERE column_name=fieldName AND table_name=tableName AND table_schema=dbName ) THEN SET @ddl=CONCAT('ALTER TABLE ',dbName,'.',tableName, ' ADD COLUMN ',fieldName,' ',fieldDef); PREPARE stmt FROM @ddl; EXECUTE stmt; END IF; END$$ DELIMITER ; [/sql] 2. Selanjut nya kita tinggal pake / panggil ja stored Procedure itu... [sql] CALL AddColumnUnlessExists(DATABASE(), 'tblproduct', 'new_field', 'varchar(32) null'); CALL AddColumnUnlessExists(DATABASE(), 'tblproduct', 'new_again', 'DATETIME'); [/sql] Note : DATABASE() : adalah current database..... S'Moga Sukses.......[/quote:9ed716bc8a] mantep banget nih @mas_kofa satu masalah lagi selesai ... tapi menemukan masalah baru lagi mudah2an ini yg terakhir untuk saat ini, berdasarkan ide stored proseducer dari @mas_kofa saya membuat juga untuk menginput record yang digunakan untuk mengisi tabel2 referensi dengan asumsi jika record sudah ada maka jangan diinsert, cuma beberapa kali mencoba dan nanya si oom google saya kepetok di penamaan table nya, ini skrip prosedur saya ... DELIMITER $$ USE skb$$ DROP PROCEDURE IF EXISTS AddNewRecord$$ CREATE DEFINER=cpses_pihtn8p9al@localhost PROCEDURE AddNewRecord(IN dbName TINYTEXT, IN tableName TINYTEXT, IN field_1 VARCHAR(25), IN field_2 VARCHAR(10), IN field_3 VARCHAR(25), IN field_4 VARCHAR(25)) BEGIN IF NOT EXISTS ( SELECT FROM tableName WHERE tableName.IdObjek=field_3 ) THEN INSERT INTO tableName(IdForm, IdBank, IdObjek, NmObjek) VALUES (field_1, field_2, field_3, field_4); END IF; END$$ DELIMITER ; CALL AddNewRecord(DATABASE(), NamaTable, 'isi_field_1', 'isi_field_2', 'isi_field_3', 'isi_field_4'); waktu dipanggil setformcetak tidak dianggap sebagai nama dari table, bagaimana cara mendefinisikan nama table dalam kasus ini, sekali lagi terimakasih sebelumnya semoga belom bosa membantu saya ...
user image
more 13 years ago

mas_kofa

u/ insert newRecord coba pake sintak REPLACE mas,..........yang berfungsi akan meng-update jika record sudah ada dan meng-Insert jika Record belum ada,

REPLACE INTO tbcoba VALUES(1, 2, 3, 4);
sintak diatas, diexecute berkali2 tidak akan error, dan record hanya bertambah satu kali jika sebelum nya belum ada, dan tidak akan bertambah jika sebelum nya sudah ada......... Note : field_1 sebagai PK
user image
more 13 years ago

babypigs

dari semua langkah2 di atas, cukup membantu proses update database yg sedang berjalan skr, tanpa menganggu data yg sedang sedang berjalan skr, untuk skr saya masih menggunakan via batch cmd dulu, belom lewat delphi tapi dengan ini sudah membantu cukup banyak, untuk semua yg sudah sumbang saran dan pikiran saya ucapkan banyak terimakasih ...
more ...
  • Pages:
  • 1
Share to

AI Forward

🚀 We're thrilled to partner with Alibaba Cloud for "AI Forward - Alibaba Cloud Global Developer Summit 2025" in Jakarta! Join us and explore the future of AI. Register now: https://int.alibabacloud.com/m/1000400772/
#AlibabaCloud #DeveloperSummit #Jakarta #AIFORWARD

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