Memindahkan File Database MDF dan LDF SQL Server

Pada salah satu project yang saya handle sempat mengharuskan salah satu database dipindahkan ke drive lain, dikarenakan besarnya kapasitas data yang digunakan oleh database tersebut. berikut merupakan step yang saya lakukan saat proses pemindahan file database ( .mdf dan .ldf ) yang digunakan sql server

1. Melakukan pengecekan path database

Pertama kita perlu memeriksa lokasi original file .mdf dan .ldf yang digunakan. mari kita asumsikan database yang ingin dipindahkan bernama "Database1"

============
SELECT name, physical_name AS CurrentLocation, state_desc
FROM sys.master_files
WHERE database_id = DB_ID(N'Database1');
=============

2. Menonaktifkan database ( set db offline )

anda perlu menonaktifkan database anda terlebih dahulu. silakan gunakan query berikut,

=============
ALTER Database Database1 set OFFLINE
=============

3. Pindahkan File .mdf dan .ldf 

Pindahkan file .mdf dan .ldf original anda , ke drive yan anda inginkan



4. Mengubah lokasi path database di SQL SERVER

anda dapat menjalankan query ini.

================
ALTER DATABASE Database1
MODIFY FILE ( NAME = Database1, FILENAME = 'F:\MSSQL\Data\Database WebApps\Database1.mdf' );
ALTER DATABASE Webapps
MODIFY FILE ( NAME = Database1_Log, FILENAME = 'F:\MSSQL\Data\Database WebApps\Database1_Log.ldf' );
GO
=================

5. Aktifkan kembali database

Silakan jalankan query berikut, untuk kembali mengaktifkan database.

===================
ALTER Database Database1 set OFFLINE
-=================

6. Cek kembali path DB

Jalankan query pada point nomor 1 untuk kembali mengecek apakah path DB sudah benar.


Demikian step - step yang saya lakukan saat proses pemindahan database di sql server, terima kasih

Penyalahgunaan Teknologi Internet Untuk Judi Online



Maraknya aktifitas  judi online di kalangan masyarakat mengakibatkan tingginya tingkat kriminalitas. Salah satu penyebabnya dikarenakan mudahnya akses ke situs judi online yang dapat lakukan secara bebas  oleh masyarakat diberbagai umur dan tempat. Kurangnya peran pemerintah dalam menyaring situs – situs judi online semakin mengakibatkan mereka semakin merajarela.



Tingginya tingkat penggunaan judi online dikarenakan sangat mudahnya masyarakat mengakses website situs judi online, untuk mengakses situs judi online seseorang tinggal mengetikan kata kunci “situs judi online” pada kata pencaharian google, maka akan muncul list situs judi online. Hal ini dapat dilakukan tanpa menggunakan VPN sama sekali.



Salah satu faktor yang membuat seseorang tertarik dengan  judi online adalah rasa penasaran ( curiosity ). seseorang yang dalam keadaan krisis lebih ingin tahu atau memiliki curiosity yang tinggi daripada mereka yang berada dalam tahap kehidupan yang sama yang tidak dalam keadaan krisis, selain itu keingintahuan perseptual lebih tinggi pada kelompok krisis daripada kelompok non-krisis di ketiga tahap kehidupan, yang menunjukkan sisi luar dari curiosity meningkat selama keadaan krisis kehidupan manusia. ( bayuningrum,2021 ). Rasa penasaran inipun didukung dengan mudahnya akses ke situs judi online.


Meskipun pihak kepolisian telah menindak banyak situs judi online beberapa bulan belakang ini. Tapi pertumbuhan situs judi online masih sangatlah tinggi



Peran pemerintah khusunya kominfo dalam memblokir situs – situs tersebut  dengan lebih giat sangatlah dibutuhkan.


Bagaimana solusi terbaik yang dapat dilakukan saat ini ?

Untuk meredam maraknya situs judi online ini kominfo dan  pemerintah Indonesia perlu bekerja sama dengan pihak google untuk menghapus situs – situs yang berbau judi dari hasil pencaharian google, seperti yang pernah dilakukan pada konten berbau pornografi.





Selain dengan google, kominfo juga dapat bekerja sama dengan pihak provider internet untuk memblokir situs – situs berbau judi. Hal ini pun pernah dilakuakn pemerintah dengan para provider internet.


Dengan semakin susahnya akses ke situs – situs tersebut, maka pengguna situs judi online maka akan menjadi berkurang. Dikarenakan semakin banyak dan rumitnya langkah – langkah yang harus dilakukan untuk mengakses situs judi online.


Refrensi / Daftar pustaka

Annur,Cindy Mutia .2022. "Sebelum Ada Isu "Kaisar Sambo", Polri Sudah Tindak Ratusan Kasus Perjudian"https://databoks.katadata.co.id/datapublish/2022/08/19/sebelum-ada-isu-kaisar-sambo-polri-sudah-tindak-ratusan-kasus-perjudian, diakses pada 03 September 2022 pukul 13.00

Wardah,Bayuningrum.2021. "Curiosity dalam kehidupan sehari-hari" dalam 34 Psychological Journal: Science and Practice 2021, Vol 1(1)

Viska. 2019. "Kominfo blokir lebih dari satu juta situs porno" https://m.kominfo.go.id/content/detail/20351/kominfo-blokir-lebih-dari-satu-juta-situs-porno/0/sorotan_media, diakses pada 03 September 2022 pukul 15:03


SQL QUERY : Membuat Fungsi Terbilang

Sering kali kita membuat laporan yang membutuhkan fungsi terbilang Seperti contoh Rp. 150.000 menjadi terbilang ( Seratu Lima Puluh Ribu Rupiah ) 

Berikut merupakan script untuk mengubah angka menjadi terbilang di SQL 

CREATE FUNCTION terbilang(@the_amount money)
RETURNS varchar(250) AS
BEGIN

DECLARE
    @divisor    bigint,
    @large_amount    money,
    @tiny_amount    money,
    @the_word    varchar(250),
    @dividen    money,
    @dummy        money,
    @weight    varchar(100),
    @unit        varchar(30),
    @follower    varchar(50),
    @prefix    varchar(10),
    @sufix        varchar(10)

--SET NOCOUNT ON
SET @the_word = ''
SET @large_amount = FLOOR(ABS(@the_amount) )
SET @tiny_amount = ROUND((ABS(@the_amount) - @large_amount ) * 100.00,0)
SET @divisor = 1000000000000.00

IF @large_amount > @divisor * 1000.00
    RETURN 'OUT OF RANGE'
   
WHILE @divisor >= 1
BEGIN       
    SET @dividen = FLOOR(@large_amount / @divisor)
    SET @large_amount = CONVERT(bigint,@large_amount) % @divisor
   
    SET @unit = ''
    IF @dividen > 0.00
        SET @unit=(CASE @divisor
            WHEN 1000000000000.00 THEN 'TRILYUN '
            WHEN 1000000000.00 THEN 'MILYAR '           
            WHEN 1000000.00 THEN 'JUTA '               
            WHEN 1000.00 THEN 'RIBU '
            ELSE @unit
        END )

    SET @weight = ''   
    SET @dummy = @dividen
    IF @dummy >= 100.00
        SET @weight = (CASE FLOOR(@dummy / 100.00)
            WHEN 1 THEN 'SE'
            WHEN 2 THEN 'DUA '
            WHEN 3 THEN 'TIGA '
            WHEN 4 THEN 'EMPAT '
            WHEN 5 THEN 'LIMA '
            WHEN 6 THEN 'ENAM '
            WHEN 7 THEN 'TUJUH '
            WHEN 8 THEN 'DELAPAN '
            ELSE 'SEMBILAN ' END ) + 'RATUS '

    SET @dummy = CONVERT(bigint,@dividen) % 100

    IF @dummy < 10.00
    BEGIN
        IF @dummy = 1.00 AND @unit = 'RIBU'
        BEGIN
            IF @dividen=@dummy
                SET @weight = @weight + 'SE'
            ELSE
                SET @weight = @weight + 'SATU '
        END
        ELSE
        IF @dummy > 0.00
            SET @weight = @weight + (CASE @dummy
                WHEN 1 THEN 'SATU '
                WHEN 2 THEN 'DUA '
                WHEN 3 THEN 'TIGA '
                WHEN 4 THEN 'EMPAT '
                WHEN 5 THEN 'LIMA '
                WHEN 6 THEN 'ENAM '
                WHEN 7 THEN 'TUJUH '
                WHEN 8 THEN 'DELAPAN '
                ELSE 'SEMBILAN ' END)
    END
    ELSE
    IF @dummy BETWEEN 11 AND 19
        SET @weight = @weight + (CASE CONVERT(bigint,@dummy) % 10
            WHEN 1 THEN 'SE'
            WHEN 2 THEN 'DUA '
            WHEN 3 THEN 'TIGA '
            WHEN 4 THEN 'EMPAT '
            WHEN 5 THEN 'LIMA '
            WHEN 6 THEN 'ENAM '
            WHEN 7 THEN 'TUJUH '
            WHEN 8 THEN 'DELAPAN '
            ELSE 'SEMBILAN ' END ) + 'BELAS '
    ELSE
    BEGIN
        SET @weight = @weight + (CASE FLOOR(@dummy / 10)
            WHEN 1 THEN 'SE'
            WHEN 2 THEN 'DUA '
            WHEN 3 THEN 'TIGA '
            WHEN 4 THEN 'EMPAT '
            WHEN 5 THEN 'LIMA '
            WHEN 6 THEN 'ENAM '
            WHEN 7 THEN 'TUJUH '
            WHEN 8 THEN 'DELAPAN '
            ELSE 'SEMBILAN ' END ) + 'PULUH '
        IF CONVERT(bigint,@dummy) % 10 > 0
            SET @weight = @weight + (CASE CONVERT(bigint,@dummy) % 10
                WHEN 1 THEN 'SATU '
                WHEN 2 THEN 'DUA '
                WHEN 3 THEN 'TIGA '
                WHEN 4 THEN 'EMPAT '
                WHEN 5 THEN 'LIMA '
                WHEN 6 THEN 'ENAM '
                WHEN 7 THEN 'TUJUH '
                WHEN 8 THEN 'DELAPAN '
                ELSE 'SEMBILAN ' END )
    END
   
    SET @the_word = @the_word + @weight + @unit
    SET @divisor = @divisor / 1000.00
END

IF FLOOR(@the_amount) = 0.00
    SET @the_word = 'NOL '

SET @follower = ''
IF @tiny_amount < 10.00
BEGIN   
    IF @tiny_amount > 0.00
        SET @follower = 'KOMA NOL ' + (CASE @tiny_amount
            WHEN 1 THEN 'SATU '
            WHEN 2 THEN 'DUA '
            WHEN 3 THEN 'TIGA '
            WHEN 4 THEN 'EMPAT '
            WHEN 5 THEN 'LIMA '
            WHEN 6 THEN 'ENAM '
            WHEN 7 THEN 'TUJUH '
            WHEN 8 THEN 'DELAPAN '
            ELSE 'SEMBILAN ' END)
END
ELSE
BEGIN
    SET @follower = 'KOMA ' + (CASE FLOOR(@tiny_amount / 10.00)
            WHEN 1 THEN 'SATU '
            WHEN 2 THEN 'DUA '
            WHEN 3 THEN 'TIGA '
            WHEN 4 THEN 'EMPAT '
            WHEN 5 THEN 'LIMA '
            WHEN 6 THEN 'ENAM '
            WHEN 7 THEN 'TUJUH '
            WHEN 8 THEN 'DELAPAN '
            ELSE 'SEMBILAN ' END)
    IF CONVERT(bigint,@tiny_amount) % 10 > 0
        SET @follower = @follower + (CASE CONVERT(bigint,@tiny_amount) % 10
            WHEN 1 THEN 'SATU '
            WHEN 2 THEN 'DUA '
            WHEN 3 THEN 'TIGA '
            WHEN 4 THEN 'EMPAT '
            WHEN 5 THEN 'LIMA '
            WHEN 6 THEN 'ENAM '
            WHEN 7 THEN 'TUJUH '
            WHEN 8 THEN 'DELAPAN '
            ELSE 'SEMBILAN ' END)
END
   
SET @the_word = @the_word + @follower

IF @the_amount < 0.00
    SET @the_word = 'MINUS ' + @the_word
   
RETURN @the_word + 'RUPIAH'
END


Untuk menjalankan function tersebut kita tinggal mengetikan perintah berikut

select dbo.terbilang(2500000) as terbilang




Semoga artikel ini membantu

Sumber : http://songkar13.blogspot.com/2013/10/membuat-fungsi-terbilang-di-sql-server.html


Elementor : Create Mobile Horizontal Scrollable Menu

Horizontal scrollable menus are a current website design trend, where for mobile displays, the hamburger display is starting to lag behind


here is how to Create Mobile Horizontal Scrollable Menu UI elementor


Make sure you have installed elementor on your wordpress website


1. Login to your wp admin.

2. Templates > Theme Builder > Header > Add New Header

3. Change the view to mobile view and drag the Nav Menu



4. Change the Nav Menu settings to the following.

# Content


Layout. Horizontal 

BreakPoint. None   



# Advance






Advance > CSS Classes. mobile-menu
Responsive >  Hide On desktop = Hide
Responsive >  Hide On Tablet = Hide
Responsive >  Hide On Mobile = Show



5. Enter the following code in the Custom CSS section

.mobile-menu ul{ /* let's set the horizontal layout for our menu */
     white-space: nowrap;
    overflow-x: auto; 
    overflow-y: hidden;
    flex-wrap: inherit !important;
    scrollbar-width: none;
    
    /* this will remove scroll-bar for mozilla based browser */
}
 
.mobile-menu a:link, a:visited{ /* some graphic adjustmend for the A tag */
    background: #ed1b24;
    color: #000000;
  
}
.mobile-menu a:hover{ /* some graphic adjustmend for the A tag */
    background-color : #283890;
    color: #000000;
  
}
.mobile-menu .elementor-item-active{ /* some graphic adjustmend for the A tag */
    background-color : #283890;
    color: #000000;
  
}
.mobile-menu ul::-webkit-scrollbar { /* now, let's remove the scroll-bar from the menu */
  display: none; }



Please adjust the color and theme according to your needs by changing the script.


If so, please publish your header.



Refrensi :

https://alessandrodecristofaro.it/mobile-horizontal-scrollable-menu/

Generate PDF Dinamis menggunakan Windows services C#

Pada artikel kali ini saya akan menerangkan bagaimana membuat services yang berjalan automatis untuk melakukan generate PDF dari HTML.

Yang perlu disiapkan.

1. Microsoft Visual Studio 2017 ( Yang saya gunakan )

2. NET. Framework >= 4.2.1

3. SSMS ( Sql Server management Studio )

4. File HTML untuk tampilan PDF nantinya.


Silakan download Package yang dibutuhkan untuk generate PDF melalui link ini 



lalu buat table terlebih dahulu di database menggunakan script berikut

CREATE TABLE [dbo].[template](
	[NAMA] [varchar](100) NOT NULL,
	[ARTIKEL] [varchar](100) NOT NULL,
	[TEMPLATE] [varchar](MAX) NOT NULL
)

Bila sudah silakan isi table tersebut dengan data berikut

NAMA : Nama Saya
ARTIKEL : GENERATE PDF
TEMPLATE : 

<h1> Ini adalah Hasil Generate PDF</h1>
<div style="font-size:12pt;font-family:Verdana;">
<p><span style="font-size: medium;">HALLO :&nbsp; &nbsp; </span><strong>[nama]</strong></p>

<p>Ini Adalah Artikel Tentang : &nbsp; <strong>[artikel]</strong></p>
<br>
<div id = "Grid">
<table  border="1" width="50%">
        <tr><td>
           <table border="0">
					<tr>
						<td width="40%">Nama Saya </td>
						<td>[nama]</td>
					</tr>
					<tr>
						<td width="60%">Nama artikel</td>
						<td>[artikel]</td>
					</tr>
					
		   </table>
        </td></tr>
    </table>
</div>
<br><br>
</div>

Oke selanjutnya silakan buka Visual Studio anda dan buat Project Windows Services Baru
File > New > Project > Windows Services
Jangan lup setting target framework anda menjadi 4.5.1 dan klik  OK


Selanjutnya silakan extract File GeneratePDF_Packages.zip  yang telah anda download sebelumnya. Lalu Tambahkan file tersebut sebagai refrance pada aplikasi anda.



Next buka file Service1.cs anda dan klik Switch to Code View  Sesuaikan Script pada file Service1.cs dengan script berikut

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;
using System.Timers;

namespace GeneratePDF
{
    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }
        Timer timer = new Timer();
        public void TraceService(string content)
        {
            //set up a filestream
            FileStream fs = new FileStream(ConfigurationManager.AppSettings["LogFilePath"] + DateTime.Now.ToString("ddMMyyyy") + ".txt", FileMode.OpenOrCreate, FileAccess.Write);
            //set up a streamwriter for adding text
            StreamWriter sw = new StreamWriter(fs);

            //find the end of the underlying filestream
            sw.BaseStream.Seek(0, SeekOrigin.End);

            //add the text
            sw.WriteLine(content);
            //add the text to the underlying filestream

            sw.Flush();
            //close the writer
            sw.Close();
        }

        protected override void OnStart(string[] args)
        {
            try
            {
                //add this line to text file during start of service
                TraceService("[" + DateTime.Now.ToString("yyyy-MM-ddTHH\\:mm\\:ss.fffzzz") + "]Initialize Service");

                //handle Elapsed event
                timer.Elapsed += new ElapsedEventHandler(OnElapsedTime);

                //This statement is used to set interval (1 minute = 60,000 milliseconds)
                timer.Interval = 300000;

                //Run Service for The First Time
                new GeneratePDF();

                //enabling the timer
                timer.Enabled = true;
            }
            catch (Exception exception)
            {
                TraceService(exception.Message);
                TraceService(exception.ToString());
            }
        }

        protected override void OnStop()
        {
            timer.Enabled = false;
            TraceService("[" + DateTime.Now.ToString("yyyy-MM-ddTHH\\:mm\\:ss.fffzzz") + "]Stop Service");

        }
        private void OnElapsedTime(object source, ElapsedEventArgs e)
        {
            try
            {
               
            }
            catch (Exception exception)
            {
                TraceService(exception.Message);
                TraceService(exception.ToString());
            }
        }
    }
}





Jika pada bagian Configuration Managernya terdapat line merah, silakan tambahkan System.Configuration pada Refrance anda.


# Penjelasan


Void TraceService ini digunakan untuk mencatat log dari services ini nantinya.


Time elapses dan time interval ini digunakan untuk mensetting setiap beberapa lama sekali service ini akan running nantinya. Yang digunakan adalah millisecond. 1 Menit ( 60000 Milisecon ) silakan disesuaikan.


Void OnElaspedTime digunakan untuk mensetting apa yang akan terjadi setelah aplikasi memasukin interval running service nantinya.


Baik selanjutnya kita akan membuat File .CS baru dengan nama GeneratePDF.cs

Klik kanan pada Solution Explorer anda > Add  > New Item dan pilih CLASS 


Buka File yang baru anda buat tersebut dan ketikan Script berikut.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;
using System.Timers;

namespace GeneratePDF
{
    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }
        Timer timer = new Timer();
        public void TraceService(string content)
        {
            //set up a filestream
            FileStream fs = new FileStream(ConfigurationManager.AppSettings["LogFilePath"] + DateTime.Now.ToString("ddMMyyyy") + ".txt", FileMode.OpenOrCreate, FileAccess.Write);
            //set up a streamwriter for adding text
            StreamWriter sw = new StreamWriter(fs);

            //find the end of the underlying filestream
            sw.BaseStream.Seek(0, SeekOrigin.End);

            //add the text
            sw.WriteLine(content);
            //add the text to the underlying filestream

            sw.Flush();
            //close the writer
            sw.Close();
        }

        protected override void OnStart(string[] args)
        {
            try
            {
                //add this line to text file during start of service
                TraceService("[" + DateTime.Now.ToString("yyyy-MM-ddTHH\\:mm\\:ss.fffzzz") + "]Initialize Service");

                //handle Elapsed event
                timer.Elapsed += new ElapsedEventHandler(OnElapsedTime);

                //This statement is used to set interval (1 minute = 60,000 milliseconds)
                timer.Interval = 300000;

                //Run Service for The First Time
                new GeneratePDF();

                //enabling the timer
                timer.Enabled = true;
            }
            catch (Exception exception)
            {
                TraceService(exception.Message);
                TraceService(exception.ToString());
            }
        }

        protected override void OnStop()
        {
            timer.Enabled = false;
            TraceService("[" + DateTime.Now.ToString("yyyy-MM-ddTHH\\:mm\\:ss.fffzzz") + "]Stop Service");

        }
        private void OnElapsedTime(object source, ElapsedEventArgs e)
        {
            try
            {
               
            }
            catch (Exception exception)
            {
                TraceService(exception.Message);
                TraceService(exception.ToString());
            }
        }
    }
}

# Penjelasan



Data pada string folder adalah data dari configuration manager yang akan digunakan untuk mensetting di mana file akan di generate


Script ini berguna untu mengambil data di database dan menyimpannya kedalam Datatable , ini berfungsi agar koneksi tidak dibuka terlalu lama jika data yang di baca banyak.


Data yang ditarik akan dimasukan ke dalam parameter sendiri 

String nama untuk Field NAMA 

string artikel untuk Field ARTIKEL

Sedangkan filename akan digunakan sebagai nama file nantinya yang akan digenerate

Untuk Field Template beberapa string akan direplace sesuai dari data yang kita ambil, pada contoh kali ini maka string [nama] akan diganti dengan field nama yang berada di database



Function Generate_from_html berfungsi untuk mengenerate template yang telah kita siapkan sebelmnya menjadi PDF dengan nama file yang telah kita tetapkan.

 

Jika sudah selesai. Silakan tambahkan class GeneratePDF pada file Service1.cs pada bagian on Start



Jika sudah, klik 2x Appconfig yang di solustion explorer dan ubah script menjadi seperti berikut

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1" />
    </startup>
 <connectionStrings>
 <add name="DBSERVER" connectionString="Data Source=[server_db];Initial Catalog=[nama_DB];Persist Security Info=True;User ID=sa;Password=password" providerName="System.Data.SqlClient"/>
  </connectionStrings>
  <appSettings>
    <add key="FOLDER" value="D:\BISA_DIHAPUS\TEMP_GENERATED_FILES\" />
    <add key="LogFilePath" value="D:\BISA_DIHAPUS\LOG_SERVICES\" />
  </appSettings>
</configuration>

# Penjelasan



Dibagian Connection string merupakan koneksi anda ke database server, sedangkan untuk APP SETTING merupakan settingan di Folder mana file log akan dibuat dan File PDF akan dibuat.

Selanjutnya kita akan membuat Installer, klik 2x Service1.cs pada solution explorer dan klik kanan pada halaman yang dibuka dan pilih add installer.



1 Klik serviceProsesInstaller dan ubah Misc > Account menjadi LocalSystem

2. Klik ServiceInstaller1 dan ubah ServiceName Sesuai keinginan anda pada panel properties

 

Lalu build Project. Dan install services melalui Command prompt as administrator


Script : %systemroot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe [path installer]


Bila sudah berhasil silakan jalankan servicenya. Lalu silakan cek di folder yang anda setting untuk generate file tersebut.