Langsung ke konten utama

LANGKAH-LANGKAH MEMBUAT DAN MENAMPILKAN DATA DARI TABEL Gn_Cyan_Bawah, DAN TABEL Sub_Gn_Cysn_Bawah PADA DATABASE DATAMUSIK.db (Part-1)

LANGKAH-LANGKAH MEMBUAT DAN MENAMPILKAN DATA DARI TABEL Gn_Cyan_Bawah, DAN TABEL Sub_Gn_Cysn_Bawah PADA DATABASE DATAMUSIK.db (Part-1)


Gn_Cyan_Atas kita pending dulu.Lebih baik kita melakukan CRUD pada Gn _Cyan_Bawah(gabung).py terlebih dahulu karena lebih mudah dibandingkan CRUD_Gn,_Cyan_,Atas(,gabung).py. Kode berikut ini:

import tkinter as tk

from tkinter import messagebox

import sqlite3

# Initialize the main window

root = tk.Tk()

root.geometry("690x1390")

root.title("Arah Arus Musik Gn_Cyan_Bawah")    

# Frame utama untuk konten

content_frame = tk.Frame(root)

content_frame.pack(fill=tk.BOTH, expand=True, padx=20, pady=20)

# Koneksi ke database dan inisialisasi tabel jika belum ada

def init_db():

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    c.execute('''

        CREATE TABLE IF NOT EXISTS Gn_Cyan_Bawah (

            ID INTEGER PRIMARY KEY,

            Level_R TEXT,

            Bass INT,            

            Trebel_Biasa INT,

            Trebel_Aneh INT,            

        )

    ''')

    c.execute('''

        CREATE TABLE IF NOT EXISTS Sub_Gn_Cyan_Bawah(

            Sub_ID INTEGER PRIMARY KEY,

            Level_D TEXT,

            Bass INT,

            Trebel_Biasa INT,

            Trebel_Aneh INT,    

        )

    ''')

    conn.commit()

    conn.close()

# Fungsi untuk membersihkan frame konten

def clear_content_frame():

    for widget in content_frame.winfo_children(): 

     widget.destroy()

root.mainloop()


Baik, mari kita lanjutkan dengan kode yang Anda berikan sebagai dasar. Kita akan mengimplementasikan fungsi CRUD (Create, Read, Update, Delete) untuk tabel `Gn_Cyan_Bawah` dan `Sub_Gn_Cyan_Bawah`. Berikut adalah penjelasan lengkap dengan tambahan untuk membuat, membaca, memperbarui, dan menghapus entri, serta menampilkan data dalam GUI.


### Langkah 1: Inisialisasi Database

```python

import sqlite3


def init_db():

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    c.execute('''

        CREATE TABLE IF NOT EXISTS Gn_Cyan_Bawah (

            ID INTEGER PRIMARY KEY,

            Level_R TEXT,

            Bass INT,

            Trebel_Biasa INT,

            Trebel_Aneh INT

        )

    ''')

    c.execute('''

        CREATE TABLE IF NOT EXISTS Sub_Gn_Cyan_Bawah (

            Sub_ID INTEGER PRIMARY KEY,

            Level_D TEXT,

            Bass INT,

            Trebel_Biasa INT,

            Trebel_Aneh INT

        )

    ''')

    conn.commit()

    conn.close()

```


### Langkah 2: Fungsi CRUD

#### Create

```python

def create_entry(level_r, bass, trebel_biasa, trebel_aneh):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    c.execute('INSERT INTO Gn_Cyan_Bawah (Level_R, Bass, Trebel_Biasa, Trebel_Aneh) VALUES (?, ?, ?, ?)',

              (level_r, bass, trebel_biasa, trebel_aneh))

    conn.commit()

    conn.close()

```


#### Read

```python

def read_entries():

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    c.execute('SELECT * FROM Gn_Cyan_Bawah')

    data = c.fetchall()

    conn.close()

    return data

```


#### Update

```python

def update_entry(id, level_r, bass, trebel_biasa, trebel_aneh):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    c.execute('''

        UPDATE Gn_Cyan_Bawah

        SET Level_R = ?, Bass = ?, Trebel_Biasa = ?, Trebel_Aneh = ?

        WHERE ID = ?

    ''', (level_r, bass, trebel_biasa, trebel_aneh, id))

    conn.commit()

    conn.close()

```


#### Delete

```python

def delete_entry(id):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    c.execute('DELETE FROM Gn_Cyan_Bawah WHERE ID = ?', (id,))

    conn.commit()

    conn.close()

```


### Langkah 3: Integrasi dengan GUI

Berikut adalah integrasi fungsi CRUD dengan GUI menggunakan tkinter:


```python

import tkinter as tk

from tkinter import messagebox


# Initialize the main window

root = tk.Tk()

root.geometry("690x1390")

root.title("Arah Arus Musik Gn_Cyan_Bawah")


# Frame utama untuk konten

content_frame = tk.Frame(root)

content_frame.pack(fill=tk.BOTH, expand=True, padx=20, pady=20)


# Inisialisasi database

init_db()


# Fungsi untuk membersihkan frame konten

def clear_content_frame():

    for widget in content_frame.winfo_children():

        widget.destroy()


# Fungsi untuk menambah entri

def add_entry():

    level_r = entry_level_r.get()

    bass = entry_bass.get()

    trebel_biasa = entry_trebel_biasa.get()

    trebel_aneh = entry_trebel_aneh.get()

    create_entry(level_r, bass, trebel_biasa, trebel_aneh)

    messagebox.showinfo("Info", "Data berhasil ditambahkan")

    display_entries()


# Fungsi untuk menampilkan entri

def display_entries():

    clear_content_frame()

    data = read_entries()

    for index, row in enumerate(data):

        tk.Label(content_frame, text=row).grid(row=index, column=0)


# Form input untuk menambah entri

tk.Label(content_frame, text="Level R").grid(row=0, column=0)

entry_level_r = tk.Entry(content_frame)

entry_level_r.grid(row=0, column=1)


tk.Label(content_frame, text="Bass").grid(row=1, column=0)

entry_bass = tk.Entry(content_frame)

entry_bass.grid(row=1, column=1)


tk.Label(content_frame, text="Trebel Biasa").grid(row=2, column=0)

entry_trebel_biasa = tk.Entry(content_frame)

entry_trebel_biasa.grid(row=2, column=1)


tk.Label(content_frame, text="Trebel Aneh").grid(row=3, column=0)

entry_trebel_aneh = tk.Entry(content_frame)

entry_trebel_aneh.grid(row=3, column=1)


btn_add = tk.Button(content_frame, text="Add Entry", command=add_entry)

btn_add.grid(row=4, column=0, columnspan=2, pady=10)


# Menampilkan entri yang ada

display_entries()


root.mainloop()

```

Dengan kode di atas, Anda bisa menambah, membaca, dan menampilkan data dari tabel `Gn_Cyan_Bawah` dalam GUI. Pastikan untuk menyesuaikan dan menambahkan fungsi update dan delete sesuai kebutuhan. Jika ada pertanyaan lebih lanjut atau perlu penyesuaian, beri tahu saya!


Kode tersebut saya buat dalam file dengan nama file: DATA_Gn_Cyan_Bawah(gabung).py, dan kode saya kembangkan lagi menjadi berikut ini:

import tkinter as tk

from tkinter import messagebox

import sqlite3

# Initialize the main window

root = tk.Tk()

root.geometry("690x1390")

root.title("Arah Arus Musik Gn_Cyan_Bawah")    

# Frame utama untuk konten

content_frame = tk.Frame(root)

content_frame.pack(fill=tk.BOTH, expand=True, padx=20, pady=20)

# Koneksi ke database dan inisialisasi tabel jika belum ada

def init_db():

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    c.execute('''

        CREATE TABLE IF NOT EXISTS Gn_Cyan_Bawah (

            ID INTEGER PRIMARY KEY,

            Level_R TEXT,

            Bass INT,            

            Trebel_Biasa INT,

            Trebel_Aneh INT,            

        )

    ''')

    c.execute('''

        CREATE TABLE IF NOT EXISTS Sub_Gn_Cyan_Bawah(

            Sub_ID INTEGER PRIMARY KEY,

            Level_D TEXT,

            Bass INT,

            Trebel_Biasa INT,

            Trebel_Aneh INT,    

        )

    ''')

    conn.commit()

    conn.close()

# Fungsi untuk membersihkan frame konten

def clear_content_frame():

    for widget in content_frame.winfo_children():

        widget.destroy()

# Fungsi untuk membersihkan entry

def clear_entries(entries):

    for entry in entries:

        entry.delete(0, tk.END)

# Fungsi CRUD untuk Gn_Cyan_Bawah

def create_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    try:

        c.execute("INSERT INTO Gn_Cyan_Bawah (ID, Level_R, Bass, Trebel_Biasa, Trebel_Aneh) VALUES (?, ?, ?, ?, ?)",

                  (row[0].get(), row[1].get(), row[2].get(), row[3].get(), row[4].get()))

        conn.commit()

    except Exception as e:

        print(f"Error inserting record: {e}")

    finally:

        conn.close()

    clear_entries_gn_cyan_bawah(row)

    display_records()

def read_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    try:

        c.execute("SELECT * FROM gn_cyan_bawah WHERE ID = ?", (row[0].get(),))

        record = c.fetchone()

        if record:

            for col, value in enumerate(record):

                row[col].delete(0, tk.END)

                row[col].insert(0, int(value) if isinstance(value, float) else value)

        else:

            print(f"No record found for ID {row[0].get()}")

        display_records()

    except Exception as e:

        print(f"Error reading record: {e}")

    finally:

        conn.close()

def update_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    try:

        c.execute("UPDATE gn_cyan_bawah SET Level_R = ?, Bass = ?, Trebel_Biasa = ?, Trebel_Aneh = ? WHERE ID = ?", 

                  (row[1].get(), row[2].get(), row[3].get(), row[4].get(), row[0].get()))

        conn.commit()

    except Exception as e:

        print(f"Error updating record: {e}")

    finally:

        conn.close()

    clear_entries_gn_cyan_bawah(row)

    display_records()

def delete_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    try:

        c.execute("DELETE FROM gn_cyan_bawah WHERE ID = ?", (row[0].get(),))

        conn.commit()

    except Exception as e:

        print(f"Error deleting record: {e}")

    finally:

        conn.close()

    clear_entries_gn_cyan_bawah(row)

    display_records()

def clear_entries_gn_cyan_bawah(row=None):

    if row:

        for entry in row:

            entry.delete(0, tk.END)

    else:

        for row in sub_entry_rows:

            for entry in row:

                entry.delete(0, tk.END)

    setup_sub_default_mode()    

    input_id_entry()

# Fungsi CRUD untuk sub_gn_cyan_bawah

def create_sub_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    try:

        c.execute("INSERT INTO Sub_Gn_Cyan_Bawah (Sub_ID, Level_D, Bass, Trebel_Biasa, Trebel_Aneh) VALUES (?, ?, ?, ?, ?)",

                  (row[0].get(), row[1].get(), row[2].get(), row[3].get(), row[4].get()))

        conn.commit()

    except Exception as e:

        print(f"Error inserting record: {e}")

    finally:

        conn.close()

    clear_entries_sub_gn_cyan_bawah(row)

    display_records()

def read_sub_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    c.execute("SELECT * FROM sub_gn_cyan_bawah WHERE Sub_ID=?", (id_value,))

    record = c.fetchone()

    conn.close()

    if record:

        for i, entry in enumerate(row):

            entry.delete(0, tk.END)

            entry.insert(0, record[i])

def update_sub_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    c.execute("UPDATE sub_gn_cyan_bawah SET Level_D = ?, Bass = ?, Trebel_Biasa = ?, Trebel_Aneh = ? WHERE Sub_ID = ?",

              data)

    conn.commit()

    conn.close()

    clear_entries_sub_gn_cyan_bawah(row)

    display_sub_records()

def delete_sub_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    c.execute("DELETE FROM sub_gn_cyan_bawah WHERE Sub_ID=?", (id_value,))

    conn.commit()

    conn.close()

    clear_entries_sub_gn_cyan_bawah(row)

    display_sub_records()

def clear_entries_sub_gn_cyan_bawah(row=None):

    if row:

        for entry in row:

            entry.delete(0, tk.END)

    else:

        for row in sub_entry_rows:

            for entry in row:

                entry.delete(0, tk.END)

    setup_sub_default_mode()    

root.mainloop()


Kode Anda telah dikembangkan dengan menambahkan fungsi CRUD untuk tabel `Gn_Cyan_Bawah` dan `Sub_Gn_Cyan_Bawah`. Mari kita lengkapi fungsi yang belum lengkap dan pastikan semuanya berfungsi dengan baik. Saya juga akan menambahkan tampilan GUI yang sesuai.


Berikut adalah kode lengkap yang telah diperbaiki dan disesuaikan:


```python

import tkinter as tk

from tkinter import messagebox

import sqlite3


# Initialize the main window

root = tk.Tk()

root.geometry("690x1390")

root.title("Arah Arus Musik Gn_Cyan_Bawah")    


# Frame utama untuk konten

content_frame = tk.Frame(root)

content_frame.pack(fill=tk.BOTH, expand=True, padx=20, pady=20)


# Koneksi ke database dan inisialisasi tabel jika belum ada

def init_db():

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    c.execute('''

        CREATE TABLE IF NOT EXISTS Gn_Cyan_Bawah (

            ID INTEGER PRIMARY KEY,

            Level_R TEXT,

            Bass INT,            

            Trebel_Biasa INT,

            Trebel_Aneh INT            

        )

    ''')

    c.execute('''

        CREATE TABLE IF NOT EXISTS Sub_Gn_Cyan_Bawah(

            Sub_ID INTEGER PRIMARY KEY,

            Level_D TEXT,

            Bass INT,

            Trebel_Biasa INT,

            Trebel_Aneh INT    

        )

    ''')

    conn.commit()

    conn.close()


# Inisialisasi database

init_db()


# Fungsi untuk membersihkan frame konten

def clear_content_frame():

    for widget in content_frame.winfo_children():

        widget.destroy()


# Fungsi untuk membersihkan entry

def clear_entries(entries):

    for entry in entries:

        entry.delete(0, tk.END)


# Fungsi CRUD untuk Gn_Cyan_Bawah

def create_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    try:

        c.execute("INSERT INTO Gn_Cyan_Bawah (ID, Level_R, Bass, Trebel_Biasa, Trebel_Aneh) VALUES (?, ?, ?, ?, ?)",

                  (row[0].get(), row[1].get(), row[2].get(), row[3].get(), row[4].get()))

        conn.commit()

    except Exception as e:

        print(f"Error inserting record: {e}")

    finally:

        conn.close()

    clear_entries(row)

    display_records()


def read_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    try:

        c.execute("SELECT * FROM Gn_Cyan_Bawah WHERE ID = ?", (row[0].get(),))

        record = c.fetchone()

        if record:

            for col, value in enumerate(record):

                row[col].delete(0, tk.END)

                row[col].insert(0, value)

        else:

            print(f"No record found for ID {row[0].get()}")

    except Exception as e:

        print(f"Error reading record: {e}")

    finally:

        conn.close()

    display_records()


def update_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    try:

        c.execute("UPDATE Gn_Cyan_Bawah SET Level_R = ?, Bass = ?, Trebel_Biasa = ?, Trebel_Aneh = ? WHERE ID = ?", 

                  (row[1].get(), row[2].get(), row[3].get(), row[4].get(), row[0].get()))

        conn.commit()

    except Exception as e:

        print(f"Error updating record: {e}")

    finally:

        conn.close()

    clear_entries(row)

    display_records()


def delete_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    try:

        c.execute("DELETE FROM Gn_Cyan_Bawah WHERE ID = ?", (row[0].get(),))

        conn.commit()

    except Exception as e:

        print(f"Error deleting record: {e}")

    finally:

        conn.close()

    clear_entries(row)

    display_records()


def display_records():

    clear_content_frame()

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    c.execute("SELECT * FROM Gn_Cyan_Bawah")

    records = c.fetchall()

    conn.close()

    for index, record in enumerate(records):

        tk.Label(content_frame, text=record).grid(row=index, column=0, padx=5, pady=5)


# Fungsi CRUD untuk Sub_Gn_Cyan_Bawah

def create_sub_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    try:

        c.execute("INSERT INTO Sub_Gn_Cyan_Bawah (Sub_ID, Level_D, Bass, Trebel_Biasa, Trebel_Aneh) VALUES (?, ?, ?, ?, ?)",

                  (row[0].get(), row[1].get(), row[2].get(), row[3].get(), row[4].get()))

        conn.commit()

    except Exception as e:

        print(f"Error inserting record: {e}")

    finally:

        conn.close()

    clear_entries(row)

    display_sub_records()


def read_sub_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    try:

        c.execute("SELECT * FROM Sub_Gn_Cyan_Bawah WHERE Sub_ID=?", (row[0].get(),))

        record = c.fetchone()

        if record:

            for i, value in enumerate(record):

                row[i].delete(0, tk.END)

                row[i].insert(0, value)

        else:

            print(f"No record found for Sub_ID {row[0].get()}")

    except Exception as e:

        print(f"Error reading record: {e}")

    finally:

        conn.close()

    display_sub_records()


def update_sub_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    try:

        c.execute("UPDATE Sub_Gn_Cyan_Bawah SET Level_D = ?, Bass = ?, Trebel_Biasa = ?, Trebel_Aneh = ? WHERE Sub_ID = ?",

                  (row[1].get(), row[2].get(), row[3].get(), row[4].get(), row[0].get()))

        conn.commit()

    except Exception as e:

        print(f"Error updating record: {e}")

    finally:

        conn.close()

    clear_entries(row)

    display_sub_records()


def delete_sub_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    try:

        c.execute("DELETE FROM Sub_Gn_Cyan_Bawah WHERE Sub_ID=?", (row[0].get(),))

        conn.commit()

    except Exception as e:

        print(f"Error deleting record: {e}")

    finally:

        conn.close()

    clear_entries(row)

    display_sub_records()


def display_sub_records():

    clear_content_frame()

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    c.execute("SELECT * FROM Sub_Gn_Cyan_Bawah")

    records = c.fetchall()

    conn.close()

    for index, record in enumerate(records):

        tk.Label(content_frame, text=record).grid(row=index, column=0, padx=5, pady=5)


# Form input untuk Gn_Cyan_Bawah

def setup_gn_cyan_bawah_form():

    clear_content_frame()

    row = []

    labels = ["ID", "Level R", "Bass", "Trebel Biasa", "Trebel Aneh"]

    for i, label in enumerate(labels):

        tk.Label(content_frame, text=label).grid(row=i, column=0, padx=5, pady=5)

        entry = tk.Entry(content_frame)

        entry.grid(row=i, column=1, padx=5, pady=5)

        row.append(entry)


    tk.Button(content_frame, text="Create", command=lambda: create_gn_cyan_bawah_record(row)).grid(row=len(labels), column=0, padx=5, pady=5)

    tk.Button(content_frame, text="Read", command=lambda: read_gn_cyan_bawah_record(row)).grid(row=len(labels), column=1, padx=5, pady=5)

    tk.Button(content_frame, text="Update", command=lambda: update_gn_cyan_bawah_record(row)).grid(row=len(labels)+1, column=0, padx=5, pady=5)

    tk.Button(content_frame, text="Delete", command=lambda: delete_gn_cyan_bawah_record(row)).grid(row=len(labels)+1, column=1, padx=5, pady=5)


    display_records()


# Form input untuk Sub_Gn_Cyan_Bawah

def setup_sub_gn_cyan_bawah_form():

    clear_content_frame()

    row = []

    labels = ["Sub ID", "Level D", "Bass", "Trebel Biasa", "Trebel Aneh"]

    for i, label in enumerate(labels):

        tk.Label(content_frame, text=label).grid(row=i, column=0, padx=5, pady=5)

        entry = tk.Entry(content_frame)

        entry.grid(row=i, column=1, padx=5, pady=5)

        row.append(entry)


    tk.Button(content_frame, text="Create", command=lambda: create


Pada kode saya tambahkan fungsi setup_default_mode() pada Gn_Cyan_Bawah, dan Sub_Gn_Cyan_Bawah, saya tambahkan juga fungsi diaplay_records() pada Gn_Cyan_Bawah, dan diaplay_sub_records() pada Sub_Gn_Cyan_Bawah. Juga saya buat content frame di dalam canvas agar semua konten dapat digulir kesemua arah dengan menambahkan scrollbar, sehingga kode berkembang menjadi berikut ini:

import tkinter as tk

from tkinter import ttk, messagebox

import sqlite3

# Initialize the main window

root = tk.Tk()

root.geometry("690x1390")

root.title("Arah Arus Musik Gn_Cyan_Bawah")    

main_frame = tk.Frame(root)

main_frame.pack(fill=tk.BOTH, expand=1)

canvas = tk.Canvas(main_frame)

canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=1)

scrollbar_y = ttk.Scrollbar(main_frame, orient=tk.VERTICAL, command=canvas.yview)

scrollbar_y.pack(side=tk.RIGHT, fill=tk.Y)

canvas.configure(yscrollcommand=scrollbar_y.set)

canvas.bind('<Configure>', lambda e: canvas.configure(scrollregion=canvas.bbox("all")))

# Frame utama untuk konten

content_frame = tk.Frame(canvas)

canvas.create_window((0, 0), window=content_frame, anchor="nw")

data_frame = tk.Frame(content_frame)

data_frame.grid(row=0, column=0, padx=10, pady=10)

# Koneksi ke database dan inisialisasi tabel jika belum ada

def init_db():

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    c.execute('''

        CREATE TABLE IF NOT EXISTS Gn_Cyan_Bawah (

            ID INTEGER PRIMARY KEY,

            Level_R TEXT,

            Bass INT,            

            Trebel_Biasa INT,

            Trebel_Aneh INT,            

        )

    ''')

    c.execute('''

        CREATE TABLE IF NOT EXISTS Sub_Gn_Cyan_Bawah(

            Sub_ID INTEGER PRIMARY KEY,

            Level_D TEXT,

            Bass INT,

            Trebel_Biasa INT,

            Trebel_Aneh INT,    

        )

    ''')

    conn.commit()

    conn.close()

# Fungsi untuk membersihkan frame konten

def clear_content_frame():

    for widget in content_frame.winfo_children():

        widget.destroy()

# Fungsi untuk membersihkan entry

def clear_entries(entries):

    for entry in entries:

        entry.delete(0, tk.END)       

def setup_default_mode():

    levels = ["Satu", "Dua", "Tiga", "Empat"]

    for row_index, row in enumerate(entry_rows):

        row[1].delete(0, tk.END)

        row[1].insert(0, levels[row_index])

        row[1].config(state='readonly')

def display_records():

    for widget in record_frame.winfo_children():

        widget.destroy()   

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    c.execute("SELECT * FROM Gn_Cyan_Bawah")

    records = c.fetchall()

    conn.close()

    for i, record in enumerate(records):

        for j, value in enumerate(record):

            tk.Label(record_frame, text=value).grid(row=i, column=j, padx=5, pady=5)                   

# Fungsi CRUD untuk Gn_Cyan_Bawah

def create_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    try:

        c.execute("INSERT INTO Gn_Cyan_Bawah (ID, Level_R, Bass, Trebel_Biasa, Trebel_Aneh) VALUES (?, ?, ?, ?, ?)",

                  (row[0].get(), row[1].get(), row[2].get(), row[3].get(), row[4].get()))

        conn.commit()

    except Exception as e:

        print(f"Error inserting record: {e}")

    finally:

        conn.close()

    clear_entries_gn_cyan_bawah(row)

    display_records()

def read_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    try:

        c.execute("SELECT * FROM gn_cyan_bawah WHERE ID = ?", (row[0].get(),))

        record = c.fetchone()

        if record:

            for col, value in enumerate(record):

                row[col].delete(0, tk.END)

                row[col].insert(0, int(value) if isinstance(value, float) else value)

        else:

            print(f"No record found for ID {row[0].get()}")

        display_records()

    except Exception as e:

        print(f"Error reading record: {e}")

    finally:

        conn.close()

def update_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    try:

        c.execute("UPDATE gn_cyan_bawah SET Level_R = ?, Bass = ?, Trebel_Biasa = ?, Trebel_Aneh = ? WHERE ID = ?", 

                  (row[1].get(), row[2].get(), row[3].get(), row[4].get(), row[0].get()))

        conn.commit()

    except Exception as e:

        print(f"Error updating record: {e}")

    finally:

        conn.close()

    clear_entries_gn_cyan_bawah(row)

    display_records()

def delete_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    try:

        c.execute("DELETE FROM gn_cyan_bawah WHERE ID = ?", (row[0].get(),))

        conn.commit()

    except Exception as e:

        print(f"Error deleting record: {e}")

    finally:

        conn.close()

    clear_entries_gn_cyan_bawah(row)

    display_records()

def clear_entries_gn_cyan_bawah(row=None):

    if row:

        for entry in row:

            entry.delete(0, tk.END)

    else:

        for row in sub_entry_rows:

            for entry in row:

                entry.delete(0, tk.END)

    setup_sub_default_mode()    

    input_id_entry()  

# Fungsi CRUD untuk sub_gn_cyan_bawah

def create_sub_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    try:

        c.execute("INSERT INTO Sub_Gn_Cyan_Bawah (Sub_ID, Level_D, Bass, Trebel_Biasa, Trebel_Aneh) VALUES (?, ?, ?, ?, ?)",

                  (row[0].get(), row[1].get(), row[2].get(), row[3].get(), row[4].get()))

        conn.commit()

    except Exception as e:

        print(f"Error inserting record: {e}")

    finally:

        conn.close()

    clear_entries_sub_gn_cyan_bawah(row)

    display_records()

def read_sub_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    c.execute("SELECT * FROM sub_gn_cyan_bawah WHERE Sub_ID=?", (id_value,))

    record = c.fetchone()

    conn.close()

    if record:

        for i, entry in enumerate(row):

            entry.delete(0, tk.END)

            entry.insert(0, record[i])

def update_sub_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    c.execute("UPDATE sub_gn_cyan_bawah SET Level_D = ?, Bass = ?, Trebel_Biasa = ?, Trebel_Aneh = ? WHERE Sub_ID = ?",

              data)

    conn.commit()

    conn.close()

    clear_entries_sub_gn_cyan_bawah(row)

    display_sub_records()

def delete_sub_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    c.execute("DELETE FROM sub_gn_cyan_bawah WHERE Sub_ID=?", (id_value,))

    conn.commit()

    conn.close()

    clear_entries_sub_gn_cyan_bawah(row)

    display_sub_records()

def clear_entries_sub_gn_cyan_bawah(row=None):

    if row:

        for entry in row:

            entry.delete(0, tk.END)

    else:

        for row in sub_entry_rows:

            for entry in row:

                entry.delete(0, tk.END)

    setup_sub_default_mode()       

def setup_sub_default_mode():

    levels = ["Satu"]

    for row_index, row in enumerate(sub_entry_rows):

        row[1].delete(0, tk.END)

        row[1].insert(0, levels[row_index])

        row[1].config(state='readonly')

def display_sub_records():

    for widget in sub_record_frame.winfo_children():

        widget.destroy()   

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    c.execute("SELECT * FROM Sub_Gn_Cyan_Bawah")

    records = c.fetc

hall()

    conn.close()

    for i, record in enumerate(records):

        for j, value in enumerate(record):

            tk.Label(sub_record_frame, text=value).grid(row=i, column=j, padx=5, pady=5)    

root.mainloop()


Berikut adalah pengembangan kode lengkap yang telah kamu buat. Saya menambahkan dan menyempurnakan beberapa fungsi serta memperbaiki beberapa kesalahan minor. Kode ini mencakup fungsi CRUD, setup default mode, dan display records untuk kedua tabel `Gn_Cyan_Bawah` dan `Sub_Gn_Cyan_Bawah`. Juga, kode ini menggunakan scrollbar untuk frame konten sehingga bisa digulir ke semua arah.


```python

import tkinter as tk

from tkinter import ttk, messagebox

import sqlite3


# Initialize the main window

root = tk.Tk()

root.geometry("690x1390")

root.title("Arah Arus Musik Gn_Cyan_Bawah")


main_frame = tk.Frame(root)

main_frame.pack(fill=tk.BOTH, expand=1)


canvas = tk.Canvas(main_frame)

canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=1)


scrollbar_y = ttk.Scrollbar(main_frame, orient=tk.VERTICAL, command=canvas.yview)

scrollbar_y.pack(side=tk.RIGHT, fill=tk.Y)


canvas.configure(yscrollcommand=scrollbar_y.set)

canvas.bind('<Configure>', lambda e: canvas.configure(scrollregion=canvas.bbox("all")))


# Frame utama untuk konten

content_frame = tk.Frame(canvas)

canvas.create_window((0, 0), window=content_frame, anchor="nw")


data_frame = tk.Frame(content_frame)

data_frame.grid(row=0, column=0, padx=10, pady=10)


record_frame = tk.Frame(content_frame)

record_frame.grid(row=1, column=0, padx=10, pady=10)


sub_entry_frame = tk.Frame(content_frame)

sub_entry_frame.grid(row=2, column=0, padx=10, pady=10)


sub_record_frame = tk.Frame(content_frame)

sub_record_frame.grid(row=3, column=0, padx=10, pady=10)


# Koneksi ke database dan inisialisasi tabel jika belum ada

def init_db():

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    c.execute('''

        CREATE TABLE IF NOT EXISTS Gn_Cyan_Bawah (

            ID INTEGER PRIMARY KEY,

            Level_R TEXT,

            Bass INT,            

            Trebel_Biasa INT,

            Trebel_Aneh INT

        )

    ''')

    c.execute('''

        CREATE TABLE IF NOT EXISTS Sub_Gn_Cyan_Bawah(

            Sub_ID INTEGER PRIMARY KEY,

            Level_D TEXT,

            Bass INT,

            Trebel_Biasa INT,

            Trebel_Aneh INT    

        )

    ''')

    conn.commit()

    conn.close()


# Fungsi untuk membersihkan entry

def clear_entries(entries):

    for entry in entries:

        entry.delete(0, tk.END)


def setup_default_mode():

    levels = ["Satu", "Dua", "Tiga", "Empat"]

    for row_index, row in enumerate(entry_rows):

        row[1].delete(0, tk.END)

        row[1].insert(0, levels[row_index])

        row[1].config(state='readonly')


def display_records():

    for widget in record_frame.winfo_children():

        widget.destroy()

    

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    c.execute("SELECT * FROM Gn_Cyan_Bawah")

    records = c.fetchall()

    conn.close()


    for i, record in enumerate(records):

        for j, value in enumerate(record):

            tk.Label(record_frame, text=value).grid(row=i, column=j, padx=5, pady=5)


# Fungsi CRUD untuk Gn_Cyan_Bawah

def create_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    try:

        c.execute("INSERT INTO Gn_Cyan_Bawah (ID, Level_R, Bass, Trebel_Biasa, Trebel_Aneh) VALUES (?, ?, ?, ?, ?)",

                  (row[0].get(), row[1].get(), row[2].get(), row[3].get(), row[4].get()))

        conn.commit()

    except Exception as e:

        print(f"Error inserting record: {e}")

    finally:

        conn.close()

    clear_entries(row)

    display_records()


def read_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    try:

        c.execute("SELECT * FROM gn_cyan_bawah WHERE ID = ?", (row[0].get(),))

        record = c.fetchone()

        if record:

            for col, value in enumerate(record):

                row[col].delete(0, tk.END)

                row[col].insert(0, int(value) if isinstance(value, float) else value)

        else:

            print(f"No record found for ID {row[0].get()}")

        display_records()

    except Exception as e:

        print(f"Error reading record: {e}")

    finally:

        conn.close()


def update_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    try:

        c.execute("UPDATE gn_cyan_bawah SET Level_R = ?, Bass = ?, Trebel_Biasa = ?, Trebel_Aneh = ? WHERE ID = ?", 

                  (row[1].get(), row[2].get(), row[3].get(), row[4].get(), row[0].get()))

        conn.commit()

    except Exception as e:

        print(f"Error updating record: {e}")

    finally:

        conn.close()

    clear_entries(row)

    display_records()


def delete_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    try:

        c.execute("DELETE FROM gn_cyan_bawah WHERE ID = ?", (row[0].get(),))

        conn.commit()

    except Exception as e:

        print(f"Error deleting record: {e}")

    finally:

        conn.close()

    clear_entries(row)

    display_records()


def clear_entries_sub_gn_cyan_bawah(row=None):

    if row:

        for entry in row:

            entry.delete(0, tk.END)

    else:

        for row in sub_entry_rows:

            for entry in row:

                entry.delete(0, tk.END)

    setup_sub_default_mode()


# Fungsi CRUD untuk sub_gn_cyan_bawah

def create_sub_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    try:

        c.execute("INSERT INTO Sub_Gn_Cyan_Bawah (Sub_ID, Level_D, Bass, Trebel_Biasa, Trebel_Aneh) VALUES (?, ?, ?, ?, ?)",

                  (row[0].get(), row[1].get(), row[2].get(), row[3].get(), row[4].get()))

        conn.commit()

    except Exception as e:

        print(f"Error inserting record: {e}")

    finally:

        conn.close()

    clear_entries_sub_gn_cyan_bawah(row)

    display_sub_records()


def read_sub_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    c.execute("SELECT * FROM sub_gn_cyan_bawah WHERE Sub_ID=?", (row[0].get(),))

    record = c.fetchone()

    conn.close()

    if record:

        for i, entry in enumerate(row):

            entry.delete(0, tk.END)

            entry.insert(0, record[i])


def update_sub_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    c.execute("UPDATE sub_gn_cyan_bawah SET Level_D = ?, Bass = ?, Trebel_Biasa = ?, Trebel_Aneh = ? WHERE Sub_ID = ?",

              (row[1].get(), row[2].get(), row[3].get(), row[4].get(), row[0].get()))

    conn.commit()

    conn.close()

    clear_entries_sub_gn_cyan_bawah(row)

    display_sub_records()


def delete_sub_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    c.execute("DELETE FROM sub_gn_cyan_bawah WHERE Sub_ID=?", (row[0].get(),))

    conn.commit()

    conn.close()

    clear_entries_sub_gn_cyan_bawah(row)

    display_sub_records()


def setup_sub_default_mode():

    levels = ["Satu"]

    for row_index, row in enumerate(sub_entry_rows):

        row[1].delete(0, tk.END)

        row[1].insert(0, levels[row_index])

        row[1].config(state='readonly')


def display_sub_records():

    for widget in sub_record_frame.winfo_children():

        widget.destroy()

    

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    c.execute("SELECT * FROM Sub_Gn_Cyan_Bawah")

    records = c.fetchall()

    conn.close()


    for i, record in enumerate(records):

        for j, value in enumerate(record):

            tk.Label(sub_record_frame, text=value).grid(row=i, column=j, padx=5, pady=5)


# Inisialisasi database dan setup awal

init_db()

setup_default_mode()


# Buat layout form dan button untuk Gn_Cyan_Bawah

entry_labels = ["ID", "Level_R", "Bass", "Trebel_Biasa", "Trebel_Aneh"]

entry_rows = []


for i, label_text in enumerate(entry_labels):

   

Ya benar, menambahkan juga sub_entry_frame, sub_recird_frame, dan Inisialisasi database. Kemudian pengembangan selanjutnya adalah membuat layout form dan label, entry, button dan konten lainnya untuk Gn_Cyan_Bawah dan Sub_Gn_Cyan_Bawah, sehingga sementara sebelum pengembangan lebih lanjut, kode menjadi berikut ini:

import tkinter as tk

from tkinter import ttk, messagebox

import sqlite3

# Initialize the main window

root = tk.Tk()

root.geometry("690x1390")

root.title("Arah Arus Musik Gn_Cyan_Bawah")    

main_frame = tk.Frame(root)

main_frame.pack(fill=tk.BOTH, expand=1)

canvas = tk.Canvas(main_frame)

canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=1)

scrollbar_y = ttk.Scrollbar(main_frame, orient=tk.VERTICAL, command=canvas.yview)

scrollbar_y.pack(side=tk.RIGHT, fill=tk.Y)

canvas.configure(yscrollcommand=scrollbar_y.set)

canvas.bind('<Configure>', lambda e: canvas.configure(scrollregion=canvas.bbox("all")))

# Frame utama untuk konten

content_frame = tk.Frame(canvas)

canvas.create_window((0, 0), window=content_frame, anchor="nw")

data_frame = tk.Frame(content_frame)

data_frame.grid(row=0, column=0, padx=10, pady=10)

record_frame = tk.Frame(content_frame)

record_frame.grid(row=1, column=0, padx=10, pady=10)

sub_entry_frame = tk.Frame(content_frame)

sub_entry_frame.grid(row=2, column=0, padx=10, pady=10)

sub_record_frame = tk.Frame(content_frame)

sub_record_frame.grid(row=3, column=0, padx=10, pady=10)

# Koneksi ke database dan inisialisasi tabel jika belum ada

def init_db():

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    c.execute('''

        CREATE TABLE IF NOT EXISTS Gn_Cyan_Bawah (

            ID INTEGER PRIMARY KEY,

            Level_R TEXT,

            Bass INT,            

            Trebel_Biasa INT,

            Trebel_Aneh INT

        )

    ''')

    c.execute('''

        CREATE TABLE IF NOT EXISTS Sub_Gn_Cyan_Bawah(

            Sub_ID INTEGER PRIMARY KEY,

            Level_D TEXT,

            Bass INT,

            Trebel_Biasa INT,

            Trebel_Aneh INT    

        )

    ''')

    conn.commit()

    conn.close()   

# Fungsi untuk membersihkan entry

def clear_entries(entries):

    for entry in entries:

        entry.delete(0, tk.END)                                

def setup_default_mode():

    levels = ["Satu", "Dua", "Tiga", "Empat"]

    for row_index, row in enumerate(entry_rows):

        row[1].delete(0, tk.END)

        row[1].insert(0, levels[row_index])

        row[1].config(state='readonly')                  

def display_records():

    for widget in record_frame.winfo_children():

        widget.destroy()   

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    c.execute("SELECT * FROM Gn_Cyan_Bawah")

    records = c.fetchall()

    conn.close()

    for i, record in enumerate(records):

        for j, value in enumerate(record):

            tk.Label(record_frame, text=value).grid(row=i, column=j, padx=5, pady=5)                    

# Fungsi CRUD untuk Gn_Cyan_Bawah

def create_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    try:

        c.execute("INSERT INTO Gn_Cyan_Bawah (ID, Level_R, Bass, Trebel_Biasa, Trebel_Aneh) VALUES (?, ?, ?, ?, ?)",

                  (row[0].get(), row[1].get(), row[2].get(), row[3].get(), row[4].get()))

        conn.commit()

    except Exception as e:

        print(f"Error inserting record: {e}")

    finally:

        conn.close()

    clear_entries_gn_cyan_bawah(row)

    display_records()


def read_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    try:

        c.execute("SELECT * FROM gn_cyan_bawah WHERE ID = ?", (row[0].get(),))

        record = c.fetchone()

        if record:

            for col, value in enumerate(record):

                row[col].delete(0, tk.END)

                row[col].insert(0, int(value) if isinstance(value, float) else value)

        else:

            print(f"No record found for ID {row[0].get()}")

        display_records()

    except Exception as e:

        print(f"Error reading record: {e}")

    finally:

        conn.close()

def update_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    try:

        c.execute("UPDATE gn_cyan_bawah SET Level_R = ?, Bass = ?, Trebel_Biasa = ?, Trebel_Aneh = ? WHERE ID = ?", 

                  (row[1].get(), row[2].get(), row[3].get(), row[4].get(), row[0].get()))

        conn.commit()

    except Exception as e:

        print(f"Error updating record: {e}")

    finally:

        conn.close()

    clear_entries_gn_cyan_bawah(row)

    display_records()

def delete_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    try:

        c.execute("DELETE FROM gn_cyan_bawah WHERE ID = ?", (row[0].get(),))

        conn.commit()

    except Exception as e:

        print(f"Error deleting record: {e}")

    finally:

        conn.close()

    clear_entries_gn_cyan_bawah(row)

    display_records()

def clear_entries_gn_cyan_bawah(row=None):

    if row:

        for entry in row:

            entry.delete(0, tk.END)

    else:

        for row in sub_entry_rows:

            for entry in row:

                entry.delete(0, tk.END)

    setup_sub_default_mode()    

    input_id_entry()       

# Fungsi CRUD untuk sub_gn_cyan_bawah

def create_sub_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    try:

        c.execute("INSERT INTO Sub_Gn_Cyan_Bawah (Sub_ID, Level_D, Bass, Trebel_Biasa, Trebel_Aneh) VALUES (?, ?, ?, ?, ?)",

                  (row[0].get(), row[1].get(), row[2].get(), row[3].get(), row[4].get()))

        conn.commit()

    except Exception as e:

        print(f"Error inserting record: {e}")

    finally:

        conn.close()

    clear_entries_sub_gn_cyan_bawah(row)

    display_records()

def read_sub_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    c.execute("SELECT * FROM sub_gn_cyan_bawah WHERE Sub_ID=?", (id_value,))

    record = c.fetchone()

    conn.close()

    if record:

        for i, entry in enumerate(row):

            entry.delete(0, tk.END)

            entry.insert(0, record[i])

def update_sub_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    c.execute("UPDATE sub_gn_cyan_bawah SET Level_D = ?, Bass = ?, Trebel_Biasa = ?, Trebel_Aneh = ? WHERE Sub_ID = ?",

              data)

    conn.commit()

    conn.close()

    clear_entries_sub_gn_cyan_bawah(row)

    display_sub_records()

def delete_sub_gn_cyan_bawah_record(row):

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    c.execute("DELETE FROM sub_gn_cyan_bawah WHERE Sub_ID=?", (id_value,))

    conn.commit()

    conn.close()

    clear_entries_sub_gn_cyan_bawah(row)

    display_sub_records()

def clear_entries_sub_gn_cyan_bawah(row=None):

    if row:

        for entry in row:

            entry.delete(0, tk.END)

    else:

        for row in sub_entry_rows:

            for entry in row:

                entry.delete(0, tk.END)

    setup_sub_default_mode()       

def setup_sub_default_mode():

    levels = ["Satu"]

    for row_index, row in enumerate(sub_entry_rows):

        row[1].delete(0, tk.END)

        row[1].insert(0, levels[row_index])

        row[1].config(state='readonly')

def display_sub_records():

    for widget in sub_record_frame.winfo_children():

        widget.destroy()

    conn = sqlite3.connect('DATAMUSIK.db')

    c = conn.cursor()

    c.execute("SELECT * FROM Sub_Gn_Cyan_Bawah")

    records = c.fetchall()

    conn.close() 

 for i, record in enumerate(records):

        for j, value in enumerate(record):

            tk.Label(sub_record_frame, text=value).grid(row=i, column=j, padx=5, pady=5)       

# Inisialisasi database 

init_db()


root.mainloop()


Bersambung ke:

LANGKAH LANGKAMEMBUAT DAN MENAMPILKAN DATA DARI TABEL Gn_Cyan_Bawah, DAN TABEL Sub_Gn_Cysn_Bawah PADA DATABASE DATAMUSIK.db (Part-2)








Komentar

Postingan populer dari blog ini

Pemograman R Studio

  Metode Numerik Menggunakan R Pengantar Gambaran Isi Buku Cara Berkontribusi dalam Buku Ini Ucapan Terima Kasih Lisensi 1  Bahasa Pemrograman R 1.1  Sejarah R 1.2  Fitur dan Karakteristik R 1.3  Kelebihan dan Kekurangan R 1.4  RStudio 1.5  Menginstall R dan RStudio 1.6  Working Directory 1.6.1  Mengubah Lokasi Working Directory 1.6.2  Mengubah Lokasi Working Directory Default 1.7  Memasang dan Mengaktifkan Paket R 1.8  Fasilitas Help 1.8.1  Mencari Help dari Suatu Perintah Tertentu 1.8.2  General Help 1.8.3  Fasilitas Help Lainnya 1.9  Referensi 2  Kalkulasi Menggunakan R 2.1  Operator Aritmatik 2.2  Fungsi Aritmetik 2.3  Operator Relasi 2.4  Operator Logika 2.5  Memasukkan Nilai Kedalam Variabel 2.6  Tipe dan Struktur Data 2.7  Vektor 2.7.1  Membuat vektor 2.7.2  Missing Values 2.7.3  Subset Pada Vektor 2.7.4  Operasi Matematis Menggunakan Vektor ...

MIGRASI DATABASE DARI SQLite KE MySQL (Part-1)

  MIGRASI DATABASE DARI SQLite KE MySQL (Part-1) Pemakaian yang mana lebih baik dalam membuat database_musik di mysql atau Exel yang cell Cell pada tabel dilakukan operasi fungsi logika matematika. Untuk keperluan membuat database atau tabel yang memerlukan operasi logika atau matematika, seperti yang Anda sebutkan, MySQL jauh lebih baik dibandingkan Excel. Berikut adalah beberapa alasan mengapa MySQL lebih disarankan: 1. **Kapasitas dan Skalabilitas**: MySQL dapat menangani jumlah data yang jauh lebih besar daripada Excel. Ini penting jika Anda berencana untuk menyimpan banyak data atau melakukan operasi yang kompleks di atas data tersebut. 2. **Kekuatan dan Kinerja**: MySQL dirancang khusus untuk memproses query dan operasi basis data dengan cepat. Ini termasuk operasi matematika, logika, dan agregasi data yang umum dilakukan dalam aplikasi. 3. **Fleksibilitas Struktur**: Dalam MySQL, Anda dapat dengan mudah menentukan struktur tabel yang kompleks dan melakukan kueri yang lebih r...

Cara Menjadi Pengembang Front End – Keterampilan Front End Web Dev

  Menyumbangkan Belajar coding —  kurikulum 3.000 jam gratis 10 JUNI 2022 / #PENGEMBANGAN UJUNG DEPAN Bagaimana Menjadi Pengembang Front End – Keterampilan Front End Web Dev Joel Olawanle Beberapa profesional dengan bayaran tertinggi di dunia adalah pengembang front-end.  Mereka menggunakan pengetahuan dan bakat mereka untuk merancang situs web yang menarik dan ramah pengguna. Pengembang front-end tidak memerlukan gelar atau sertifikat sekolah untuk bekerja.  Sebaliknya, mereka harus memahami dasar-dasar pengembangan front-end, bahasa pemrograman, dan kerangka kerja pengembangan front-end. Dalam panduan ini, Anda akan belajar bagaimana menjadi pengembang front end dengan terlebih dahulu memahami apa yang dimaksud dengan pengembangan front end, keterampilan teknis dan soft skill yang diperlukan, bahasa dan kerangka kerja yang tersedia, dan beberapa langkah untuk memulai. Seorang pengembang front-end di Amerika Serikat dapat memperoleh rata-rata $86,178 per tahun, menu...