Langsung ke konten utama

LOGIKA YANG DITERAPKAN PADA DATA TABEL Gn_Cyan_Atas, DAN TABEL Sub_Gn_Cyan_Atas (Part-1)

 LOGIKA YANG DITERAPKAN PADA DATA Bass TABEL Gn_Cyan_Atas, DAN TABEL Sub_Gn_Cyan_Atas (Part-1)


Berikut ini logika yang diterapkan pada data Bass di tabel Gn_Cyan_Atas, dan tabel Sub_Gn_Cyan_Atas:

Logika pada data Bass di tabel Gn_Cyan_Atas:

I. Jika data gugus data yang terpilih dari kolom Bass pada Gn_Cyan_Atas:

1. Jika data dari Bass_1 id 1 maka level_gn = 1, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:

maka data dari Bass_1 id 1 menjadi data Bass_1 id 1

2. Jika data dari Bass_1 id 2 maka level_gn = 2, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:

maka data dari Bass_1 id 2 menjadi data Bass_1 id 2

3. Jika data dari Bass_1 id 3 maka level_gn = 3, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:

maka data dari Bass_1 id 3 menjadi Bass_1 id 3.

4. Jika data dari Bass_2 id 1 maka level_gn = 4, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:

maka data dari Bass_2 id 1 menjadi data Bass_2 id 1.

5. Kolom Bass_2 id 2 adalah kosong (tidak boleh menginput data di sel ini).

6. . Jika data dari Bass_2 id 3 maka level_gn = 5, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:

maka data dari Bass_2 id 3 menjadi data Bass_2 id 3.

7. Jika data dari Bass_3 id 1 maka level_gn = 6, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:

maka data dari Bass_3 id 1 menjadi data Bass_3 id 1.

8. Jika data dari Bass_3 id 2 maka level_gn = 7, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:

maka data dari Bass_3 id 2 menjadi data Bass_3 id 2.

9. Jika data dari Bass_3 id 3 maka level_gn = 8, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:

maka data dari Bass_3 id 3 menjadi data Bass_3 id 3.

10. Kolom Bass_4 id 1 adalah kosong (tidak boleh menginput data di sel ini).

11. . Jika data dari Bass_4 id 2 maka level_gn = 9, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:

maka data dari Bass_4 id 2 menjadi data Bass_4 id 2.

12. Jika data dari Bass_4 id 3 maka level_gn = 10, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:

maka data dari Bass_4 id 3 menjadi data Bass_4 id 3.

13. Jika data dari Bass_5 id 1 maka level_gn = 11, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:

maka data dari Bass_5 id 1 menjadi data Bass_5 id 1.

14,  Jika data dari Bass_5 id 2 maka level_gn = 12, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:

maka data dari Bass_5 id 2 menjadi data Bass_5 id 2.

15. Kolom Bass_5 id 3 adalah kosong (tidak boleh menginput data di sel ini). 


Logika pada data Bass di Sub_Gn_Cyan_Bawah:

II. Jika data gugus nada yang terpilih dari kolom Bass pada Sub_Gn_Cyan_Atas:

1.. Jika data dari Bass_1 sub_id 1 maka level_gn = 1, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:

maka data dari Bass_1 sub_id 1 adalah menjadi data Bass_1 sub_id 1.

2.. Jika data dari Bass_2 sub_id 1 maka level_gn = 2, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:

maka data dari Bass_2 sub_id 1 adalah menjadi data Bass_2 sub_id 1.

3.. Jika data dari Bass_3 sub_id 1 maka level_gn = 3, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:

maka data dari Bass_3 sub_id 1 adalah menjadi data Bass_3 sub_id 1.

4.. Jika data dari Bass_4 sub_id 1 maka level_gn = 4, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:

maka data dari Bass_4 sub_id 1 adalah menjadi data Bass_4 sub_id 1.

5. Kolom Bass_5 Sub_id 1 adalah kosong (tidak boleh menginput data di sel ini).

6. Jika data dari Bass_1 sub_id 1 maka level_gn = 5, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:

maka untuk level_gn 5, data dari Bass_1 sub_id 1 adalah menjadi data Bass_1 sub_id 1 yang setiap karakter angka datanya dikurang 1.

7.. Jika data dari Bass_2 sub_id 1 maka level_gn = 6, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:

maka untuk level_gn 6,  data dari Bass_2 sub_id 1 adalah menjadi data Bass_2 sub_id 1 yang setiap karakter angka datanya dikurang 1.

8.  Jika data dari Bass_3 sub_id 1 maka level_gn = 7, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:

maka untuk level_gn 7,  data dari Bass_3 sub_id 1 adalah menjadi data Bass_3 sub_id 1 yang setiap karakter angka datanya dikurang 1. 

9. Jika data dari Bass_4 sub_id 1 maka level_gn = 8, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:

maka untuk level_gn 8,  data dari Bass_4 sub_id 1 adalah menjadi data Bass_4 sub_id 1 yang setiap karakter angka datanya dikurang 1. 

10. Jika data dari Bass_1 sub_id 1 maka level_gn = 9, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:

maka untuk level_gn 9,  data dari Bass_1 sub_id 1 adalah menjadi data Bass_1 sub_id 1 yang setiap karakter angka datanya dikurang 2.

11.. Jika data dari Bass_2 sub_id 1 maka level_gn = 10, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:

maka untuk level_gn 10,  data dari Bass_2 sub_id 1 adalah menjadi data Bass_2 sub_id 1 yang setiap karakter angka datanya dikurang 2.

12.  Jika data dari Bass_3 sub_id 1 maka level_gn = 11, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:

maka untuk level_gn 11,  data dari Bass_3 sub_id 1 adalah menjadi data Bass_3 sub_id 1 yang setiap karakter angka datanya dikurang 2. 

13. Jika data dari Bass_4 sub_id 1 maka level_gn = 12, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:

maka untuk level_gn 12,  data dari Bass_4 sub_id 1 adalah menjadi data Bass_4 sub_id 1 yang setiap karakter angka datanya dikurang 2. 


 Bagaimana jika penentuan level_gn tidak hanya berdasarkan id saja, tapi penentuan level_gn berdasarkan id dan kolom.

Untuk Gn_Cyan_Atas, masing-masing level_gn adalah eksklusif antara yang satu dengan yang lainnya: Level_gn 1 adalah ID 1 kolom Bass_1, Level_gn 4 adalah ID 1 kolom Bass_2, Level_gn 6 adalah ID 1 kolom Bass_3, Level_gn 11 adalah ID 1 kolom Bass_5, Level_gn 2 adalah ID 2 kolom Bass_1, Level_gn 7 adalah ID 2 kolom Bass_3, Level_gn 9 adalah ID 2 kolom Bass_4, Level_gn 12 adalah ID 2 kolom Bass_5, Level_gn 3 adalah ID 3 kolom Bass_1, Level_gn 5 adalah ID 3 kolom Bass_2, Level_gn 8 adalah ID 3 kolom Bass_3, Level_gn 10 adalah ID 3 kolom Bass_4,   

Kemudian Untuk Sub_Gn_Cyan_Atas, masing-masing level_gn adalah eksklusif antara yang satu dengan yang lainnya: Level_gn 1 adalah ID 1 kolom Bass_1, Level_gn 5 adalah ID 1 kolom Bass_1 yang setiap karakter angkanya dikurang 1, Level_gn 9 adalah ID 1 kolom Bass_1 yang setiap karakter angkanya dikurang 2, Level_gn 2 adalah ID 1 kolom Bass_2, Level_gn 6 adalah ID 1 kolom Bass_2 yang setiap karakter angkanya dikurang 1, Level_gn 10 adalah ID 1 kolom Bass_2 yang setiap karakter angkanya dikurang 2, Level_gn 3 adalah ID 1 kolom Bass_3, Level_gn 7 adalah ID 1 kolom Bass_3 yang setiap karakter angkanya dikurang 1, Level_gn 11 adalah ID 1 kolom Bass_3, yang setiap karakter angkanya dikurang 2, Level_gn 4 adalah ID 1 kolom Bass_4, Level_gn 8 adalah ID 1 kolom Bass_4 yang setiap karakter angkanya dikurang 1, Level_gn 12 adalah ID 1 kolom Bass_4 yang setiap karakter angkanya dikurang 2,       


Dengan logika yang dijelaskan, kita perlu membuat dua fungsi terpisah untuk menentukan `Level_Gn` berdasarkan tabel `Gn_Cyan_Atas` dan `Sub_Gn_Cyan_Atas`. Berikut adalah implementasi fungsi `level_gn` yang diperbarui sesuai dengan aturan eksklusif yang diberikan:


### Fungsi untuk `Gn_Cyan_Atas`


```python

# Fungsi untuk menentukan ID dan Kolom pada Gn_Cyan_Atas berdasarkan Level_Gn

def level_gn_gn_cyan_atas():

    try:

        level_gn_selected = int(entry_level_gn.get()) # Mendapatkan Level_Gn dari input


        # Penentuan ID dan Kolom berdasarkan Level_Gn yang dipilih untuk Gn_Cyan_Atas

        if level_gn_selected == 1:

            id_selected = 1

            kolom_selected = 'Bass_1'

        elif level_gn_selected == 4:

            id_selected = 1

            kolom_selected = 'Bass_2'

        elif level_gn_selected == 6:

            id_selected = 1

            kolom_selected = 'Bass_3'

        elif level_gn_selected == 11:

            id_selected = 1

            kolom_selected = 'Bass_5'

        elif level_gn_selected == 2:

            id_selected = 2

            kolom_selected = 'Bass_1'

        elif level_gn_selected == 7:

            id_selected = 2

            kolom_selected = 'Bass_3'

        elif level_gn_selected == 9:

            id_selected = 2

            kolom_selected = 'Bass_4'

        elif level_gn_selected == 12:

            id_selected = 2

            kolom_selected = 'Bass_5'

        elif level_gn_selected == 3:

            id_selected = 3

            kolom_selected = 'Bass_1'

        elif level_gn_selected == 5:

            id_selected = 3

            kolom_selected = 'Bass_2'

        elif level_gn_selected == 8:

            id_selected = 3

            kolom_selected = 'Bass_3'

        elif level_gn_selected == 10:

            id_selected = 3

            kolom_selected = 'Bass_4'

        else:

            messagebox.showerror("Error", "Level_Gn harus antara 1 hingga 12.")

            return None, None


        # Menyisipkan ID dan kolom yang dipilih ke dalam entry box

        entry_id.delete(0, 'end')

        entry_id.insert(0, str(id_selected))


        entry_kolom.delete(0, 'end')

        entry_kolom.insert(0, kolom_selected)


        return id_selected, kolom_selected


    except ValueError:

        messagebox.showerror("Error", "Masukkan nilai Level_Gn yang valid!")

        return None, None

```


### Fungsi untuk `Sub_Gn_Cyan_Atas`


```python

# Fungsi untuk menentukan ID dan Kolom pada Sub_Gn_Cyan_Atas berdasarkan Level_Gn

def level_gn_sub_gn_cyan_atas():

    try:

        level_gn_selected = int(entry_level_gn.get()) # Mendapatkan Level_Gn dari input


        # Penentuan ID dan Kolom berdasarkan Level_Gn yang dipilih untuk Sub_Gn_Cyan_Atas

        if level_gn_selected == 1:

            id_selected = 1

            kolom_selected = 'Bass_1'

            modifikasi_angka = 0

        elif level_gn_selected == 5:

            id_selected = 1

            kolom_selected = 'Bass_1'

            modifikasi_angka = -1

        elif level_gn_selected == 9:

            id_selected = 1

            kolom_selected = 'Bass_1'

            modifikasi_angka = -2

        elif level_gn_selected == 2:

            id_selected = 1

            kolom_selected = 'Bass_2'

            modifikasi_angka = 0

        elif level_gn_selected == 6:

            id_selected = 1

            kolom_selected = 'Bass_2'

            modifikasi_angka = -1

        elif level_gn_selected == 10:

            id_selected = 1

            kolom_selected = 'Bass_2'

            modifikasi_angka = -2

        elif level_gn_selected == 3:

            id_selected = 1

            kolom_selected = 'Bass_3'

            modifikasi_angka = 0

        elif level_gn_selected == 7:

            id_selected = 1

            kolom_selected = 'Bass_3'

            modifikasi_angka = -1

        elif level_gn_selected == 11:

            id_selected = 1

            kolom_selected = 'Bass_3'

            modifikasi_angka = -2

        elif level_gn_selected == 4:

            id_selected = 1

            kolom_selected = 'Bass_4'

            modifikasi_angka = 0

        elif level_gn_selected == 8:

            id_selected = 1

            kolom_selected = 'Bass_4'

            modifikasi_angka = -1

        elif level_gn_selected == 12:

            id_selected = 1

            kolom_selected = 'Bass_4'

            modifikasi_angka = -2

        else:

            messagebox.showerror("Error", "Level_Gn harus antara 1 hingga 12.")

            return None, None, None


        # Menyisipkan ID dan kolom yang dipilih ke dalam entry box

        entry_id.delete(0, 'end')

        entry_id.insert(0, str(id_selected))


        entry_kolom.delete(0, 'end')

        entry_kolom.insert(0, kolom_selected)


        return id_selected, kolom_selected, modifikasi_angka


    except ValueError:

        messagebox.showerror("Error", "Masukkan nilai Level_Gn yang valid!")

        return None, None, None

```


### Penjelasan:

1. **Gn_Cyan_Atas**:

   - Setiap `Level_Gn` menentukan kombinasi unik antara `ID` dan `kolom`.

   - Fungsi `level_gn_gn_cyan_atas` mengembalikan `ID` dan `kolom` yang sesuai dengan `Level_Gn`.

2. **Sub_Gn_Cyan_Atas**:

   - Setiap `Level_Gn` menentukan kombinasi unik `ID`, `kolom`, dan juga nilai modifikasi angka yang diperlukan untuk mengurangi setiap karakter angka dalam kolom yang dipilih.

   - Fungsi `level_gn_sub_gn_cyan_atas` mengembalikan `ID`, `kolom`, dan nilai `modifikasi_angka` yang sesuai dengan `Level_Gn`.

3. **Modifikasi Angka**:

   - `modifikasi_angka` digunakan untuk mengurangi setiap karakter angka dalam data sesuai dengan ketentuan.

4. **Error Handling**:

   - Fungsi akan memberikan pesan kesalahan jika `Level_Gn` yang dimasukkan tidak valid atau tidak sesuai dengan rentang yang telah ditentukan.

Apakah implementasi ini sudah sesuai dengan kebutuhan Anda?


Bisakah isi kode dari kedua fungsi tersebut yaitu fungsi level_gn_gn_cyan_atas, dan fungsi level_gn_sub_gn_cyan_atas, keduanya dijadikan dalam satu fungsi saja yaitu fungsi level_gn 


Tentu, kita bisa menggabungkan kedua fungsi tersebut menjadi satu fungsi `level_gn`. Fungsi ini akan menangani logika untuk kedua tabel, yaitu `Gn_Cyan_Atas` dan `Sub_Gn_Cyan_Atas`, berdasarkan input dari `Level_Gn`.

Berikut adalah implementasi fungsi gabungan `level_gn`:


```python

def level_gn(table_name):

    try:

        level_gn_selected = int(entry_level_gn.get()) # Mendapatkan Level_Gn dari input

        

        # Variabel awal untuk ID, kolom, dan modifikasi angka (hanya digunakan untuk Sub_Gn_Cyan_Atas)

        id_selected = None

        kolom_selected = None

        modifikasi_angka = 0 # Default 0, tidak ada pengurangan


        if table_name == 'Gn_Cyan_Atas':

            # Logika untuk tabel Gn_Cyan_Atas

            if level_gn_selected == 1:

                id_selected = 1

                kolom_selected = 'Bass_1'

            elif level_gn_selected == 4:

                id_selected = 1

                kolom_selected = 'Bass_2'

            elif level_gn_selected == 6:

                id_selected = 1

                kolom_selected = 'Bass_3'

            elif level_gn_selected == 11:

                id_selected = 1

                kolom_selected = 'Bass_5'

            elif level_gn_selected == 2:

                id_selected = 2

                kolom_selected = 'Bass_1'

            elif level_gn_selected == 7:

                id_selected = 2

                kolom_selected = 'Bass_3'

            elif level_gn_selected == 9:

                id_selected = 2

                kolom_selected = 'Bass_4'

            elif level_gn_selected == 12:

                id_selected = 2

                kolom_selected = 'Bass_5'

            elif level_gn_selected == 3:

                id_selected = 3

                kolom_selected = 'Bass_1'

            elif level_gn_selected == 5:

                id_selected = 3

                kolom_selected = 'Bass_2'

            elif level_gn_selected == 8:

                id_selected = 3

                kolom_selected = 'Bass_3'

            elif level_gn_selected == 10:

                id_selected = 3

                kolom_selected = 'Bass_4'

            else:

                messagebox.showerror("Error", "Level_Gn harus antara 1 hingga 12.")

                return None, None


        elif table_name == 'Sub_Gn_Cyan_Atas':

            # Logika untuk tabel Sub_Gn_Cyan_Atas

            if level_gn_selected == 1:

                id_selected = 1

                kolom_selected = 'Bass_1'

            elif level_gn_selected == 5:

                id_selected = 1

                kolom_selected = 'Bass_1'

                modifikasi_angka = -1

            elif level_gn_selected == 9:

                id_selected = 1

                kolom_selected = 'Bass_1'

                modifikasi_angka = -2

            elif level_gn_selected == 2:

                id_selected = 1

                kolom_selected = 'Bass_2'

            elif level_gn_selected == 6:

                id_selected = 1

                kolom_selected = 'Bass_2'

                modifikasi_angka = -1

            elif level_gn_selected == 10:

                id_selected = 1

                kolom_selected = 'Bass_2'

                modifikasi_angka = -2

            elif level_gn_selected == 3:

                id_selected = 1

                kolom_selected = 'Bass_3'

            elif level_gn_selected == 7:

                id_selected = 1

                kolom_selected = 'Bass_3'

                modifikasi_angka = -1

            elif level_gn_selected == 11:

                id_selected = 1

                kolom_selected = 'Bass_3'

                modifikasi_angka = -2

            elif level_gn_selected == 4:

                id_selected = 1

                kolom_selected = 'Bass_4'

            elif level_gn_selected == 8:

                id_selected = 1

                kolom_selected = 'Bass_4'

                modifikasi_angka = -1

            elif level_gn_selected == 12:

                id_selected = 1

                kolom_selected = 'Bass_4'

                modifikasi_angka = -2

            else:

                messagebox.showerror("Error", "Level_Gn harus antara 1 hingga 12.")

                return None, None, None


        else:

            messagebox.showerror("Error", "Nama tabel tidak valid!")

            return None, None, None


        # Menyisipkan ID dan kolom yang dipilih ke dalam entry box

        entry_id.delete(0, 'end')

        entry_id.insert(0, str(id_selected))


        entry_kolom.delete(0, 'end')

        entry_kolom.insert(0, kolom_selected)


        if table_name == 'Gn_Cyan_Atas':

            return id_selected, kolom_selected

        elif table_name == 'Sub_Gn_Cyan_Atas':

            return id_selected, kolom_selected, modifikasi_angka


    except ValueError:

        messagebox.showerror("Error", "Masukkan nilai Level_Gn yang valid!")

        return None, None, None

```


### Penjelasan:

1. **Parameter `table_name`:**

   - Fungsi ini menerima parameter `table_name` yang menentukan apakah fungsi tersebut akan bekerja dengan `Gn_Cyan_Atas` atau `Sub_Gn_Cyan_Atas`.

2. **Logika Khusus untuk Setiap Tabel:**

   - Jika `table_name` adalah `'Gn_Cyan_Atas'`, maka logika khusus untuk tabel tersebut akan dijalankan.

   - Jika `table_name` adalah `'Sub_Gn_Cyan_Atas'`, maka logika khusus untuk tabel tersebut akan dijalankan, termasuk penghitungan `modifikasi_angka`.

3. **Return Value:**

   - Untuk `Gn_Cyan_Atas`, fungsi mengembalikan `id_selected` dan `kolom_selected`.

   - Untuk `Sub_Gn_Cyan_Atas`, fungsi mengembalikan `id_selected`, `kolom_selected`, dan `modifikasi_angka`.

4. **Validasi:**

   - Fungsi memeriksa apakah `Level_Gn` yang dimasukkan valid (antara 1 hingga 12) dan apakah `table_name` valid (`Gn_Cyan_Atas` atau `Sub_Gn_Cyan_Atas`).

   - Jika terjadi kesalahan, pesan error akan ditampilkan dan `None` akan dikembalikan.

Fungsi ini sekarang sudah bisa menangani kedua tabel dengan logika yang berbeda dalam satu fungsi saja. Apakah ini sudah sesuai dengan yang Anda butuhkan?


Untuk mengambil dan menampilkan data gugus nada terpilih dari tabel Gn_Cyan_Atas, dan Sub_Gn_Cyan_Atas yang ditampilkan di entry_bass, dan entry_sub_bass, tolong perbaiki kode berikut karena masih muncul error pada kotak message_box dengan pesan error': Terjadi kesalahan: name 'sub_id_selected' id....

Berikut kode yang butuh diperbaiki:

import tkinter as tk

from tkinter import ttk

from tkinter import messagebox

import sqlite3

from tkinter import Tk, Label, Entry, Button, Frame, StringVar



# Initialize the main window

root = tk.Tk()

root.geometry("690x1390")

root.title("Arah Arus Musik Gn_Cyan_Atas dan Sub_Gn_Cyan_Atas")


# Buat frame_top di dalam inner_frame

frame_top = tk.Frame(root)

frame_top.pack(pady=10) # Pengaturan padding agar tidak terlalu dekat dengan elemen lainnya

frame_top.grid_columnconfigure(0, minsize=-20) # Tambahkan kolom negatif (menggeser ke kiri)


# Letakkan entry dan combobox di bawah 

label_level_gn_selected = tk.Label(frame_top, text="Level Gn:")

label_level_gn_selected.grid(row=1, column=0, padx=0, pady=7)

entry_level_gn = tk.Entry(frame_top)

entry_level_gn.grid(row=1, column=1, padx=0, pady=7)


label_id_selected = tk.Label(frame_top, text="ID:")

label_id_selected.grid(row=2, column=0, padx=0, pady=7)

entry_id = tk.Entry(frame_top)

entry_id.grid(row=2, column=1, padx=0, pady=7)


label_progres = tk.Label(frame_top, text="Progres:")

label_progres.grid(row=3, column=0, padx=0, pady=7)

progres_var = tk.StringVar()

progres_combobox = ttk.Combobox(frame_top, textvariable=progres_var)

progres_combobox['values'] = (1, 2, 3)

progres_combobox.grid(row=3, column=1, padx=0, pady=7)


label_mode = tk.Label(frame_top, text="Mode:")

label_mode.grid(row=4, column=0, padx=0, pady=7)

mode_var = tk.StringVar()

mode_combobox = ttk.Combobox(frame_top, textvariable=mode_var, values=["naik", "turun"])

mode_combobox.grid(row=4, column=1, padx=0, pady=7)


label_nada = tk.Label(frame_top, text="Nada:")

label_nada.grid(row=5, column=0, padx=0, pady=5)

nada_var = tk.StringVar()

nada_combobox = ttk.Combobox(frame_top, textvariable=nada_var)

nada_combobox['values'] = ("Bass", "Trebel")

nada_combobox.grid(row=5, column=1, padx=0, pady=5)


# Hapus label, entry field, dan combobox untuk Progres dan Mode yang tidak digunakan lagi

# abel_progres.grid_forget()

# progres_combobox.grid_forget()

# label_mode.grid_forget()

# mode_combobox.grid_forget() 


# Fungsi untuk mengambil data Gn_Cyan_Bawah dari database berdasarkan ID

def get_data_gn_cyan_bawah_from_db(id_selected):

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

    cursor = conn.cursor()

    cursor.execute("SELECT * FROM Gn_Cyan_Bawah WHERE ID = ?", (id_selected,))

    data = cursor.fetchone()

    conn.close()

    return data

        

# Fungsi untuk mengambil data Sub_Gn_Cyan_Bawah dari database berdasarkan Sub_ID

def get_data_sub_gn_cyan_bawah_from_db(sub_id_selected):

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

    cursor = conn.cursor()

    cursor.execute("SELECT * FROM Sub_Gn_Cyan_Bawah WHERE Sub_ID = ?", (sub_id_selected,))

    data = cursor.fetchone()

    conn.close()

    return data

    

# Fungsi untuk menyesuaikan nilai Bass berdasarkan progres

def adjust_bass_value(bass_value, progres, mode):

    if bass_value.isdigit():

        adjusted_value = ''.join(str(int(char)) if char.isdigit() else char for char in bass_value)

    else:

        adjusted_value = bass_value

    return adjusted_value       

    

 # Fungsi untuk menyesuaikan nilai sub bass berdasarkan progres

def adjust_sub_bass_value(sub_bass_value, progres):

    if sub_bass_value.isdigit():

        adjusted_value = ''.join(str(int(char)) if char.isdigit() else char for char in sub_bass_value)

    else:

        adjusted_value = sub_bass_value

    return adjusted_value       


# Fungsi untuk memilih nada Bass, dan Sub Bass 

def pilih_nada():

    try:

        level_gn_selected = int(entry_level_gn.get())

        id_selected = int(entry_id.get())

        progres_selected = int(progres_var.get())

        mode_selected = mode_var.get().lower()

        nada_selected = nada_var.get().lower()


        if id_selected is None or sub_id_selected is None:

            return


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

        cursor = conn.cursor()


        # Mengambil data dari tabel Gn_Cyan_Atas berdasarkan ID dan kolom

        cursor.execute("SELECT Bass_1, Bass_2,, Bass_3, Bass_4, Bass_5 FROM Gn_Cyan_Atas WHERE ID = ?", (id_selected,))

        data_gn_cyan_atas = cursor.fetchone()


        # Mengambil data dari tabel Sub_Gn_Cyan_Atas berdasarkan Sub_ID dan kolom

        cursor.execute("SELECT Bass_1, Bass_2, Bass_3, Bass_4, Bass_5 FROM Sub_Gn_Cyan_Atas WHERE Sub_ID = ?", (1))

        data_sub_gn_cyan_atas = cursor.fetchone()


        conn.close()


        # Logika untuk mengisi entry_bass berdasarkan data Gn_Cyan_Atas

        if data_gn_cyan_atas:

            if level_gn_selected == 1:

                entry_bass.delete(0, tk.END)

                entry_bass.insert(0, data_gn_cyan_atas[0])

            elif level_gn_selected == 2:

                entry_bass.delete(0, tk.END)

                entry_bass.insert(0, data_gn_cyan_atas[1])

            elif level_gn_selected == 3:

                entry_bass.delete(0, tk.END)

                entry_bass.insert(0, data_gn_cyan_atas[2])

            elif level_gn_selected == 4:

                entry_bass.delete(0, tk.END)

                entry_bass.insert(0, data_gn_cyan_atas[0])

            elif level_gn_selected == 5:

                entry_bass.delete(0, tk.END)

                entry_bass.insert(0, data_gn_cyan_atas[2])

            elif level_gn_selected == 6:

                entry_bass.delete(0, tk.END)

                entry_bass.insert(0, data_gn_cyan_atas[0])

            elif level_gn_selected == 7:

                entry_bass.delete(0, tk.END)

                entry_bass.insert(0, data_gn_cyan_atas[1])

            elif level_gn_selected == 8:

                entry_bass.delete(0, tk.END)

                entry_bass.insert(0, data_gn_cyan_atas[2])

            # Setiap logika level_gn bisa ditambahkan disini...


        # Logika untuk mengisi entry_sub_bass berdasarkan data Sub_Gn_Cyan_Atas

        if data_sub_gn_cyan_atas:

            if level_gn_selected == 1:

                entry_sub_bass.delete(0, tk.END)

                entry_sub_bass.insert(0, data_sub_gn_cyan_atas[0])

            elif level_gn_selected == 2:

                entry_sub_bass.delete(0, tk.END)

                entry_sub_bass.insert(0, data_sub_gn_cyan_atas[1])

            elif level_gn_selected == 3:

                entry_sub_bass.delete(0, tk.END)

                entry_sub_bass.insert(0, data_sub_gn_cyan_atas[2])

            elif level_gn_selected == 4:

                entry_sub_bass.delete(0, tk.END)

                entry_sub_bass.insert(0, data_sub_gn_cyan_atas[0])

            elif level_gn_selected == 5:

                entry_sub_bass.delete(0, tk.END)

                entry_sub_bass.insert(0, data_sub_gn_cyan_atas[2])

            elif level_gn_selected == 6:

                entry_sub_bass.delete(0, tk.END)

                entry_sub_bass.insert(0, data_sub_gn_cyan_atas[0])

            elif level_gn_selected == 7:

                entry_sub_bass.delete(0, tk.END)

                entry_sub_bass.insert(0, data_sub_gn_cyan_atas[1])

            elif level_gn_selected == 8:

                entry_sub_bass.delete(0, tk.END)

                entry_sub_bass.insert(0, data_sub_gn_cyan_atas[2])

            # Setiap logika level_gn bisa ditambahkan disini...


    except Exception as e:

        messagebox.showerror("Error", f"Terjadi kesalahan: {str(e)}")


# Fungsi untuk memastikan urutan Level_Gn berdsarkan ID dan kolom

def level_gn(table_name):

    try:

        level_gn_selected = int(entry_level_gn.get()) # Mendapatkan Level_Gn dari input

        

        # Variabel awal untuk ID, kolom, dan modifikasi angka (hanya digunakan untuk Sub_Gn_Cyan_Atas)

        id_selected = None

        kolom_selected = None

        modifikasi_angka = 0 # Default 0, tidak ada pengurangan


        if table_name == 'Gn_Cyan_Atas':

            # Logika untuk tabel Gn_Cyan_Atas

            if level_gn_selected == 1:

                id_selected = 1

                kolom_selected = 'Bass_1'

            elif level_gn_selected == 4:

                id_selected = 1

                kolom_selected = 'Bass_2'

            elif level_gn_selected == 6:

                id_selected = 1

                kolom_selected = 'Bass_3'

            elif level_gn_selected == 11:

                id_selected = 1

                kolom_selected = 'Bass_5'

            elif level_gn_selected == 2:

                id_selected = 2

                kolom_selected = 'Bass_1'

            elif level_gn_selected == 7:

                id_selected = 2

                kolom_selected = 'Bass_3'

            elif level_gn_selected == 9:

                id_selected = 2

                kolom_selected = 'Bass_4'

            elif level_gn_selected == 12:

                id_selected = 2

                kolom_selected = 'Bass_5'

            elif level_gn_selected == 3:

                id_selected = 3

                kolom_selected = 'Bass_1'

            elif level_gn_selected == 5:

                id_selected = 3

                kolom_selected = 'Bass_2'

            elif level_gn_selected == 8:

                id_selected = 3

                kolom_selected = 'Bass_3'

            elif level_gn_selected == 10:

                id_selected = 3

                kolom_selected = 'Bass_4'

            else:

                messagebox.showerror("Error", "Level_Gn harus antara 1 hingga 12.")

                return None, None


        elif table_name == 'Sub_Gn_Cyan_Atas':

            # Logika untuk tabel Sub_Gn_Cyan_Atas

            if level_gn_selected == 1:

                id_selected = 1

                kolom_selected = 'Bass_1'

            elif level_gn_selected == 5:

                id_selected = 1

                kolom_selected = 'Bass_1'

                modifikasi_angka = -1

            elif level_gn_selected == 9:

                id_selected = 1

                kolom_selected = 'Bass_1'

                modifikasi_angka = -2

            elif level_gn_selected == 2:

                id_selected = 1

                kolom_selected = 'Bass_2'

            elif level_gn_selected == 6:

                id_selected = 1

                kolom_selected = 'Bass_2'

                modifikasi_angka = -1

            elif level_gn_selected == 10:

                id_selected = 1

                kolom_selected = 'Bass_2'

                modifikasi_angka = -2

            elif level_gn_selected == 3:

                id_selected = 1

                kolom_selected = 'Bass_3'

            elif level_gn_selected == 7:

                id_selected = 1

                kolom_selected = 'Bass_3'

                modifikasi_angka = -1

            elif level_gn_selected == 11:

                id_selected = 1

                kolom_selected = 'Bass_3'

                modifikasi_angka = -2

            elif level_gn_selected == 4:

                id_selected = 1

                kolom_selected = 'Bass_4'

            elif level_gn_selected == 8:

                id_selected = 1

                kolom_selected = 'Bass_4'

                modifikasi_angka = -1

            elif level_gn_selected == 12:

                id_selected = 1

                kolom_selected = 'Bass_4'

                modifikasi_angka = -2

            else:

                messagebox.showerror("Error", "Level_Gn harus antara 1 hingga 12.")

                return None, None, None


        else:

            messagebox.showerror("Error", "Nama tabel tidak valid!")

            return None, None, None


        # Menyisipkan ID dan kolom yang dipilih ke dalam entry box

        entry_id.delete(0, 'end')

        entry_id.insert(0, str(id_selected))


        entry_kolom.delete(0, 'end')

        entry_kolom.insert(0, kolom_selected)


        if table_name == 'Gn_Cyan_Atas':

            return id_selected, kolom_selected

        elif table_name == 'Sub_Gn_Cyan_Atas':

            return id_selected, kolom_selected, modifikasi_angka


    except ValueError:

        messagebox.showerror("Error", "Masukkan nilai Level_Gn yang valid!")

        return None, None, None                  

                                                      

separator = ttk.Separator(frame_top, orient='horizontal')

separator.grid(row=6, column=0, sticky="ew", pady=10)


 # Tombol untuk memilih nada

select_button = tk.Button(frame_top, text="Pilih Nada", bg="green", fg="white", command=pilih_nada)

select_button.grid(row=7, column=1, padx=0, pady=0) 


# Bottom Frame

bottom_frame = tk.Frame(root, bg="#e2e2e2")

bottom_frame.pack(side=tk.TOP, fill=tk.X)


# Label Gugusan Nada Terpilih Field

Gn_tetpilih_label = tk.Label(bottom_frame, text="Gugusan- \n Nada Terpilih:")

Gn_tetpilih_label.grid(row=8, column=0, padx=5, pady=5)


#Label dan Entry Ambil Gugusan nada Teroilih

label_bass = tk.Label(bottom_frame, text="Bass Gn Cyan Atas:")

label_bass.grid(row=7, column=1, padx=5, pady=5)

entry_bass = tk.Entry(bottom_frame)

entry_bass.grid(row=8, column=1, padx=5, pady=5)


label_sub_bass = tk.Label(bottom_frame, text="Sub Bass Gn Cyan Atas")

label_sub_bass.grid(row=7, column=2, padx=5, pady=5)

entry_sub_bass = tk.Entry(bottom_frame)

entry_sub_bass.grid(row=8, column=2, padx=5, pady=5)


label_trebel = tk.Label(bottom_frame, text="Trebel Gn Cyan Atas")

label_trebel.grid(row=7, column=3, padx=5, pady=5)

entry_trebel = tk.

Entry(bottom_frame)

entry_trebel.grid(row=8, column=3, padx=5, pady=5)


label_sub_trebel = tk.Label(bottom_frame, text="Sub Trebel Gn Cyan Atas")

label_sub_trebel.grid(row=7, column=4, padx=5, pady=5)

entry_sub_trebel = tk.Entry(bottom_frame)

entry_sub_trebel.grid(row=8, column=4, padx=5, pady=5)


root.mainloop()


Dari penjelasan kode yang Anda berikan, terdapat beberapa hal yang perlu diperhatikan untuk memperbaiki masalah ini:

1. **Pendefinisian `sub_id_selected`**: Error tersebut muncul karena variabel `sub_id_selected` tidak didefinisikan sebelumnya di dalam fungsi `pilih_nada`. Pastikan semua variabel yang digunakan dalam fungsi sudah dideklarasikan dengan benar.

2. **Penggunaan Cursor dan SQL**: Di bagian kode yang mengakses database, pastikan perintah SQL yang digunakan sudah benar. Terutama pada bagian `SELECT Bass_1, Bass_2, Bass_3, Bass_4, Bass_5 FROM Sub_Gn_Cyan_Atas WHERE Sub_ID = ?` harus dipastikan parameter kedua dari `execute` adalah tuple (perhatikan adanya koma dalam `(?,)`).

Berikut adalah kode yang telah diperbaiki:


```python

import tkinter as tk

from tkinter import ttk

from tkinter import messagebox

import sqlite3


# Initialize the main window

root = tk.Tk()

root.geometry("690x1390")

root.title("Arah Arus Musik Gn_Cyan_Atas dan Sub_Gn_Cyan_Atas")


# Buat frame_top di dalam inner_frame

frame_top = tk.Frame(root)

frame_top.pack(pady=10) # Pengaturan padding agar tidak terlalu dekat dengan elemen lainnya

frame_top.grid_columnconfigure(0, minsize=-20) # Tambahkan kolom negatif (menggeser ke kiri)


# Letakkan entry dan combobox di bawah 

label_level_gn_selected = tk.Label(frame_top, text="Level Gn:")

label_level_gn_selected.grid(row=1, column=0, padx=0, pady=7)

entry_level_gn = tk.Entry(frame_top)

entry_level_gn.grid(row=1, column=1, padx=0, pady=7)


label_id_selected = tk.Label(frame_top, text="ID:")

label_id_selected.grid(row=2, column=0, padx=0, pady=7)

entry_id = tk.Entry(frame_top)

entry_id.grid(row=2, column=1, padx=0, pady=7)


label_progres = tk.Label(frame_top, text="Progres:")

label_progres.grid(row=3, column=0, padx=0, pady=7)

progres_var = tk.StringVar()

progres_combobox = ttk.Combobox(frame_top, textvariable=progres_var)

progres_combobox['values'] = (1, 2, 3)

progres_combobox.grid(row=3, column=1, padx=0, pady=7)


label_mode = tk.Label(frame_top, text="Mode:")

label_mode.grid(row=4, column=0, padx=0, pady=7)

mode_var = tk.StringVar()

mode_combobox = ttk.Combobox(frame_top, textvariable=mode_var, values=["naik", "turun"])

mode_combobox.grid(row=4, column=1, padx=0, pady=7)


label_nada = tk.Label(frame_top, text="Nada:")

label_nada.grid(row=5, column=0, padx=0, pady=5)

nada_var = tk.StringVar()

nada_combobox = ttk.Combobox(frame_top, textvariable=nada_var)

nada_combobox['values'] = ("Bass", "Trebel")

nada_combobox.grid(row=5, column=1, padx=0, pady=5)


entry_bass = tk.Entry(frame_top)

entry_bass.grid(row=6, column=1, padx=0, pady=7)


entry_sub_bass = tk.Entry(frame_top)

entry_sub_bass.grid(row=7, column=1, padx=0, pady=7)


# Fungsi untuk memilih nada Bass, dan Sub Bass 

def pilih_nada():

    try:

        level_gn_selected = int(entry_level_gn.get())

        id_selected = int(entry_id.get())

        progres_selected = int(progres_var.get())

        mode_selected = mode_var.get().lower()

        nada_selected = nada_var.get().lower()


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

        cursor = conn.cursor()


        # Mengambil data dari tabel Gn_Cyan_Atas berdasarkan ID dan kolom

        cursor.execute("SELECT Bass_1, Bass_2, Bass_3, Bass_4, Bass_5 FROM Gn_Cyan_Atas WHERE ID = ?", (id_selected,))

        data_gn_cyan_atas = cursor.fetchone()


        # Mengambil data dari tabel Sub_Gn_Cyan_Atas berdasarkan Sub_ID dan kolom

        cursor.execute("SELECT Bass_1, Bass_2, Bass_3, Bass_4, Bass_5 FROM Sub_Gn_Cyan_Atas WHERE Sub_ID = ?", (1,))

        data_sub_gn_cyan_atas = cursor.fetchone()


        conn.close()


        # Logika untuk mengisi entry_bass berdasarkan data Gn_Cyan_Atas

        if data_gn_cyan_atas:

            if level_gn_selected == 1:

                entry_bass.delete(0, tk.END)

                entry_bass.insert(0, data_gn_cyan_atas[0])

            elif level_gn_selected == 2:

                entry_bass.delete(0, tk.END)

                entry_bass.insert(0, data_gn_cyan_atas[1])

            elif level_gn_selected == 3:

                entry_bass.delete(0, tk.END)

                entry_bass.insert(0, data_gn_cyan_atas[2])

            elif level_gn_selected == 4:

                entry_bass.delete(0, tk.END)

                entry_bass.insert(0, data_gn_cyan_atas[0])

            elif level_gn_selected == 5:

                entry_bass.delete(0, tk.END)

                entry_bass.insert(0, data_gn_cyan_atas[2])

            elif level_gn_selected == 6:

                entry_bass.delete(0, tk.END)

                entry_bass.insert(0, data_gn_cyan_atas[0])

            elif level_gn_selected == 7:

                entry_bass.delete(0, tk.END)

                entry_bass.insert(0, data_gn_cyan_atas[1])

            elif level_gn_selected == 8:

                entry_bass.delete(0, tk.END)

                entry_bass.insert(0, data_gn_cyan_atas[2])


        # Logika untuk mengisi entry_sub_bass berdasarkan data Sub_Gn_Cyan_Atas

        if data_sub_gn_cyan_atas:

            if level_gn_selected == 1:

                entry_sub_bass.delete(0, tk.END)

                entry_sub_bass.insert(0, data_sub_gn_cyan_atas[0])

            elif level_gn_selected == 2:

                entry_sub_bass.delete(0, tk.END)

                entry_sub_bass.insert(0, data_sub_gn_cyan_atas[1])

            elif level_gn_selected == 3:

                entry_sub_bass.delete(0, tk.END)

                entry_sub_bass.insert(0, data_sub_gn_cyan_atas[2])

            elif level_gn_selected == 4:

                entry_sub_bass.delete(0, tk.END)

                entry_sub_bass.insert(0, data_sub_gn_cyan_atas[0])

            elif level_gn_selected == 5:

                entry_sub_bass.delete(0, tk.END)

                entry_sub_bass.insert(0, data_sub_gn_cyan_atas[2])

            elif level_gn_selected == 6:

                entry_sub_bass.delete(0, tk.END)

                entry_sub_bass.insert(0, data_sub_gn_cyan_atas[0])

            elif level_gn_selected == 7:

                entry_sub_bass.delete(0, tk.END)

                entry_sub_bass.insert(0, data_sub_gn_cyan_atas[1])

            elif level_gn_selected == 8:

                entry_sub_bass.delete(0, tk.END)

                entry_sub_bass.insert(0, data_sub_gn_cyan_atas[2])


    except Exception as e:

        messagebox.showerror("Error", f"Terjadi kesalahan: {str(e)}")



# Tombol untuk menjalankan fungsi pilih_nada

button_pilih_nada = tk.Button(root, text="Pilih Nada", command=pilih_nada)

button_pilih_nada.pack(pady=20)


root.mainloop()

```


**Perbaikan Utama:**

1. **Sub_ID**: Saya menghapus referensi `sub_id_selected` yang tidak didefinisikan. Sebagai gantinya, saya menggunakan nilai `1` secara langsung ketika mengambil data dari `Sub_Gn_Cyan_Atas`. Jika Anda memiliki cara untuk menentukan `sub_id_selected`, masukkan nilai tersebut sesuai kebutuhan.

2. **Penanganan SQL**: Memastikan bahwa parameter untuk query SQL diberikan sebagai tuple, bahkan jika hanya ada satu parameter (misalnya, `(1,)`).

Dengan perubahan ini, error yang sebelumnya Anda alami seharusnya tidak muncul lagi. Jika masih ada masalah, mungkin ada kebutuhan untuk mengecek sumber data atau alur logika lebih lanjut.


Kode keseluruhan untuk memilih dan menampilkan data terpilih dari Gn_Cyan_Atas, dan Sub_Gn_Cyan_Atas adalah seperti berikut ini, tapi masih ada salah di baris 132 hingga 157, pemilihan data Bass dari Sub_Gn_Cyan_Atas di level_gn 5 hingga level_gn 12 yang harus memakai fungsi adjust_sub_bass_value. Jadi tolong perbaiki kode isi fungsi def adjust_sub_bass_value(), dan fungsi pilih_nada untuk Sub_Gn_Cyan_Atas di level_gn 6, hingga level_gn 12. Berikut kode yang butuh diperbaiki:


import tkinter as tk

from tkinter import ttk

from tkinter import messagebox

import sqlite3



# Initialize the main window

root = tk.Tk()

root.geometry("690x1390")

root.title("Arah Arus Musik Gn_Cyan_Atas dan Sub_Gn_Cyan_Atas")


# Buat frame_top di dalam inner_frame

frame_top = tk.Frame(root)

frame_top.pack(pady=10) # Pengaturan padding agar tidak terlalu dekat dengan elemen lainnya

frame_top.grid_columnconfigure(0, minsize=-20) # Tambahkan kolom negatif (menggeser ke kiri)


# Letakkan entry dan combobox di bawah 

label_level_gn_selected = tk.Label(frame_top, text="Level Gn:")

label_level_gn_selected.grid(row=1, column=0, padx=0, pady=7)

entry_level_gn = tk.Entry(frame_top)

entry_level_gn.grid(row=1, column=1, padx=0, pady=7)


label_id_selected = tk.Label(frame_top, text="ID:")

label_id_selected.grid(row=2, column=0, padx=0, pady=7)

entry_id = tk.Entry(frame_top)

entry_id.grid(row=2, column=1, padx=0, pady=7)


label_progres = tk.Label(frame_top, text="Progres:")

label_progres.grid(row=3, column=0, padx=0, pady=7)

progres_var = tk.StringVar()

progres_combobox = ttk.Combobox(frame_top, textvariable=progres_var)

progres_combobox['values'] = (1, 2, 3)

progres_combobox.grid(row=3, column=1, padx=0, pady=7)


label_mode = tk.Label(frame_top, text="Mode:")

label_mode.grid(row=4, column=0, padx=0, pady=7)

mode_var = tk.StringVar()

mode_combobox = ttk.Combobox(frame_top, textvariable=mode_var, values=["naik", "turun"])

mode_combobox.grid(row=4, column=1, padx=0, pady=7)


label_nada = tk.Label(frame_top, text="Nada:")

label_nada.grid(row=5, column=0, padx=0, pady=5)

nada_var = tk.StringVar()

nada_combobox = ttk.Combobox(frame_top, textvariable=nada_var)

nada_combobox['values'] = ("Bass", "Trebel")

nada_combobox.grid(row=5, column=1, padx=0, pady=5)


 # Fungsi untuk menyesuaikan nilai sub bass berdasarkan progres

def adjust_sub_bass_value(sub_bass_value, progres):

    if sub_bass_value.isdigit():

        adjusted_value = ''.join(str(int(char) - modifikasi_angka) if char.isdigit() else char for char in sub_bass_value)

    else:

        adjusted_value = sub_bass_value

    return adjusted_value       


# Fungsi untuk memilih nada Bass, dan Sub Bass 

def pilih_nada():

    try:

        level_gn_selected = int(entry_level_gn.get())

        id_selected = int(entry_id.get())

        progres_selected = int(progres_var.get())

        mode_selected = mode_var.get().lower()

        nada_selected = nada_var.get().lower()


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

        cursor = conn.cursor()


        # Mengambil data dari tabel Gn_Cyan_Atas berdasarkan ID dan kolom

        cursor.execute("SELECT Bass_1, Bass_2, Bass_3, Bass_4, Bass_5 FROM Gn_Cyan_Atas WHERE ID = ?", (id_selected,))

        data_gn_cyan_atas = cursor.fetchone()


        # Mengambil data dari tabel Sub_Gn_Cyan_Atas berdasarkan Sub_ID dan kolom

        cursor.execute("SELECT Bass_1, Bass_2, Bass_3, Bass_4, Bass_5 FROM Sub_Gn_Cyan_Atas WHERE Sub_ID = ?", (1,))

        data_sub_gn_cyan_atas = cursor.fetchone()


        conn.close()


        # Logika untuk mengisi entry_bass berdasarkan data Gn_Cyan_Atas

        if data_gn_cyan_atas:

            if level_gn_selected == 1:

                entry_bass.delete(0, tk.END)

                entry_bass.insert(0, data_gn_cyan_atas[0])

            elif level_gn_selected == 2:

                entry_bass.delete(0, tk.END)

                entry_bass.insert(0, data_gn_cyan_atas[0])

            elif level_gn_selected == 3:

                entry_bass.delete(0, tk.END)

                entry_bass.insert(0, data_gn_cyan_atas[0])

            elif level_gn_selected == 4:

                entry_bass.delete(0, tk.END)

                entry_bass.insert(0, data_gn_cyan_atas[1])

            elif level_gn_selected == 5:

                entry_bass.delete(0, tk.END)

                entry_bass.insert(0, data_gn_cyan_atas[1])

            elif level_gn_selected == 6:

                entry_bass.delete(0, tk.END)

                entry_bass.insert(0, data_gn_cyan_atas[2])

            elif level_gn_selected == 7:

                entry_bass.delete(0, tk.END)

                entry_bass.insert(0, data_gn_cyan_atas[2])

            elif level_gn_selected == 8:

                entry_bass.delete(0, tk.END)

                entry_bass.insert(0, data_gn_cyan_atas[2])

            elif level_gn_selected == 9:

                entry_bass.delete(0, tk.END)

                entry_bass.insert(0, data_gn_cyan_atas[3])

            elif level_gn_selected == 10:

                entry_bass.delete(0, tk.END)

                entry_bass.insert(0, data_gn_cyan_atas[3])

            elif level_gn_selected == 11:

                entry_bass.delete(0, tk.END)

                entry_bass.insert(0, data_gn_cyan_atas[4])

            elif level_gn_selected == 12:

                entry_bass.delete(0, tk.END)

                entry_bass.insert(0, data_gn_cyan_atas[4])                


        # Logika untuk mengisi entry_sub_bass berdasarkan data Sub_Gn_Cyan_Atas

        if data_sub_gn_cyan_atas:

            if level_gn_selected == 1:

                entry_sub_bass.delete(0, tk.END)

                entry_sub_bass.insert(0, data_sub_gn_cyan_atas[0])

            elif level_gn_selected == 2:

                entry_sub_bass.delete(0, tk.END)

                entry_sub_bass.insert(0, data_sub_gn_cyan_atas[1])

            elif level_gn_selected == 3:

                entry_sub_bass.delete(0, tk.END)

                entry_sub_bass.insert(0, data_sub_gn_cyan_atas[2])

            elif level_gn_selected == 4:

                entry_sub_bass.delete(0, tk.END)

                entry_sub_bass.insert(0, data_sub_gn_cyan_atas[3])

                                

            elif level_gn_selected == 5:

                entry_sub_bass.delete(0, tk.END)

                entry_sub_bass.insert(0, adjust_value(data_sub_gn_cyan_atas[0], modifikasi_angka - 1)                                 

            elif level_gn_selected == 6:

                entry_sub_bass.delete(0, tk.END)

                entry_sub_bass.insert(0, adjust_value(data_sub_gn_cyan_atas[1], modifikasi_angka - 1)       

            elif level_gn_selected == 7:

                entry_sub_bass.delete(0, tk.END)

                entry_sub_bass.insert(0, adjust_value(data_sub_gn_cyan_atas[2], modifikasi_angka - 1)       

            elif level_gn_selected == 8:

                entry_sub_bass.delete(0, tk.END)

                entry_sub_bass.insert(0, adjust_value(data_sub_gn_cyan_atas[3], modifikasi_angka - 1)       

                

            elif level_gn_selected == 9:

                entry_sub_bass.delete(0, tk.END)

                entry_sub_bass.insert(0, adjust_value(data_sub_gn_cyan_atas[0], modifikasi_angka - 2)                       

            elif level_gn_selected == 10:

                entry_sub_bass.delete(0, tk.END)

                entry_sub_bass.insert(0, adjust_value(data_sub_gn_cyan_atas[1], modifikasi_angka - 2)         

            elif level_gn_selected == 11:

                entry_sub_bass.delete(0, tk.END)

                entry_sub_bass.insert(0, adjust_value(data_sub_gn_cyan_atas[2], modifikasi_angka - 2)         

            elif level_gn_selected == 12:

                entry_sub_bass.delete(0, tk.END)

                entry_sub_bass.insert(0, adjust_value(data_sub_gn_cyan_atas[3], modifikasi_angka - 2)       

                

    except Exception as e:

        messagebox.showerror("Error", f"Terjadi kesalahan: {str(e)}")

        

# Fungsi untuk memastikan urutan Level_Gn berdsarkan ID dan kolom

def level_gn(table_name):

    try:

        level_gn_selected = int(entry_level_gn.get()) # Mendapatkan Level_Gn dari input

        

        # Variabel awal untuk ID, kolom, dan modifikasi angka (hanya digunakan untuk Sub_Gn_Cyan_Atas)

        id_selected = None

        kolom_selected = None

        modifikasi_angka = 0 # Default 0, tidak ada pengurangan


        if table_name == 'Gn_Cyan_Atas':

            # Logika untuk tabel Gn_Cyan_Atas

            if level_gn_selected == 1:

                id_selected = 1

                kolom_selected = 'Bass_1'

            elif level_gn_selected == 4:

                id_selected = 1

                kolom_selected = 'Bass_2'

            elif level_gn_selected == 6:

                id_selected = 1

                kolom_selected = 'Bass_3'

            elif level_gn_selected == 11:

                id_selected = 1

                kolom_selected = 'Bass_5'

            elif level_gn_selected == 2:

                id_selected = 2

                kolom_selected = 'Bass_1'

            elif level_gn_selected == 7:

                id_selected = 2

                kolom_selected = 'Bass_3'

            elif level_gn_selected == 9:

                id_selected = 2

                kolom_selected = 'Bass_4'

            elif level_gn_selected == 12:

                id_selected = 2

                kolom_selected = 'Bass_5'

            elif level_gn_selected == 3:

                id_selected = 3

                kolom_selected = 'Bass_1'

            elif level_gn_selected == 5:

                id_selected = 3

                kolom_selected = 'Bass_2'

            elif level_gn_selected == 8:

                id_selected = 3

                kolom_selected = 'Bass_3'

            elif level_gn_selected == 10:

                id_selected = 3

                kolom_selected = 'Bass_4'

            else:

                messagebox.showerror("Error", "Level_Gn harus antara 1 hingga 12.")

                return None, None


        elif table_name == 'Sub_Gn_Cyan_Atas':

            # Logika untuk tabel Sub_Gn_Cyan_Atas

            if level_gn_selected == 1:

                id_selected = 1

                kolom_selected = 'Bass_1'

            elif level_gn_selected == 5:

                id_selected = 1

                kolom_selected = 'Bass_1'

                modifikasi_angka = -1

            elif level_gn_selected == 9:

                id_selected = 1

                kolom_selected = 'Bass_1'

                modifikasi_angka = -2

            elif level_gn_selected == 2:

                id_selected = 1

                kolom_selected = 'Bass_2'

            elif level_gn_selected == 6:

                id_selected = 1

                kolom_selected = 'Bass_2'

                modifikasi_angka = -1

            elif level_gn_selected == 10:

                id_selected = 1

                kolom_selected = 'Bass_2'

                modifikasi_angka = -2

            elif level_gn_selected == 3:

                id_selected = 1

                kolom_selected = 'Bass_3'

            elif level_gn_selected == 7:

                id_selected = 1

                kolom_selected = 'Bass_3'

                modifikasi_angka = -1

            elif level_gn_selected == 11:

                id_selected = 1

                kolom_selected = 'Bass_3'

                modifikasi_angka = -2

            elif level_gn_selected == 4:

                id_selected = 1

                kolom_selected = 'Bass_4'

            elif level_gn_selected == 8:

                id_selected = 1

                kolom_selected = 'Bass_4'

                modifikasi_angka = -1

            elif level_gn_selected == 12:

                id_selected = 1

                kolom_selected = 'Bass_4'

                modifikasi_angka = -2

            else:

                messagebox.showerror("Error", "Level_Gn harus antara 1 hingga 12.")

                return None, None, None


        else:

            messagebox.showerror("Error", "Nama tabel tidak valid!")

            return None, None, None


        # Menyisipkan ID dan kolom yang dipilih ke dalam entry box

        entry_id.delete(0, 'end')

        entry_id.insert(0, str(id_selected))


        entry_kolom.delete(0, 'end')

        entry_kolom.insert(0, kolom_selected)


        if table_name == 'Gn_Cyan_Atas':

            return id_selected, kolom_selected

        elif table_name == 'Sub_Gn_Cyan_Atas':

            return id_selected, kolom_selected, modifikasi_angka


    except ValueError:

        messagebox.showerror("Error", "Masukkan nilai Level_Gn yang valid!")

        return None, None, None                  


label_bass_gn_cyan_atas = tk.Label(frame_top, text="Bass Gn_Cyan_Atas:")

label_bass_gn_cyan_atas.grid(row=8, column=0, padx=0, pady=7)

entry_bass = tk.Entry(frame_top)

entry_bass.grid(row=8, column=1, padx=0, pady=7)


#label dan entry

label_bass_sub_gn_cyan_atas = tk.Label(frame_top, text="Sub Bass Gn_Cyan_Atas:")

label_bass_sub_gn_cyan_atas.grid(row=9, column=0, padx=0, pady=7)

entry_sub_bass = tk.Entry(frame_top)

entry_sub_bass.grid(row=9, column=1, padx=0, pady=7)


separator = ttk.Separator(frame_top,

 orient='horizontal')

separator.grid(row=7, column=0, sticky="ew", pady=15)


# Tombol untuk menjalankan fungsi pilih_nada

button_pilih_nada = tk.Button(frame_top, text="Pilih Nada", bg="lightgreen", command=pilih_nada)

button_pilih_nada.grid(row=6, column=1, padx=0, pady=7)


root.mainloop()


Untuk memperbaiki kode pada fungsi `adjust_sub_bass_value()` dan `pilih_nada()`, saya telah melakukan beberapa penyesuaian agar dapat menangani data dari `Sub_Gn_Cyan_Atas` di level_gn 5 hingga 12 dengan benar. Berikut adalah perbaikan yang diperlukan:


1. **Fungsi `adjust_sub_bass_value()`**:

   - Fungsi ini sekarang akan menerima dua parameter: `sub_bass_value` dan `modifikasi_angka`. `modifikasi_angka` digunakan untuk menentukan pengurangan pada karakter angka di `sub_bass_value`.


2. **Fungsi `pilih_nada()`**:

   - Fungsi ini diubah untuk menggunakan `adjust_sub_bass_value()` pada level_gn 5 hingga 12 untuk `Sub_Gn_Cyan_Atas`.


### Kode yang telah diperbaiki:


```python

import tkinter as tk

from tkinter import ttk

from tkinter import messagebox

import sqlite3


# Fungsi untuk menyesuaikan nilai sub bass berdasarkan progres

def adjust_sub_bass_value(sub_bass_value, modifikasi_angka):

    adjusted_value = ''.join(str(int(char) - modifikasi_angka) if char.isdigit() else char for char in sub_bass_value)

    return adjusted_value


# Fungsi untuk memilih nada Bass, dan Sub Bass 

def pilih_nada():

    try:

        level_gn_selected = int(entry_level_gn.get())

        id_selected = int(entry_id.get())

        progres_selected = int(progres_var.get())

        mode_selected = mode_var.get().lower()

        nada_selected = nada_var.get().lower()


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

        cursor = conn.cursor()


        # Mengambil data dari tabel Gn_Cyan_Atas berdasarkan ID dan kolom

        cursor.execute("SELECT Bass_1, Bass_2, Bass_3, Bass_4, Bass_5 FROM Gn_Cyan_Atas WHERE ID = ?", (id_selected,))

        data_gn_cyan_atas = cursor.fetchone()


Setelah data_gn_cyan_atas = , lanjutkan kodenya hingga selesai 


Baik, berikut adalah kelanjutan kode setelah `data_gn_cyan_atas = ...` hingga selesai, termasuk perbaikan pada fungsi `adjust_sub_bass_value()` dan logika untuk memilih dan menampilkan data dari tabel `Sub_Gn_Cyan_Atas` untuk level_gn 5 hingga 12:

```python

# Logika untuk memilih dan menampilkan data Gn_Cyan_Atas

        if data_gn_cyan_atas:

            if level_gn_selected in [1, 2, 3]:

                entry_bass.delete(0, tk.END)

                entry_bass.insert(0, data_gn_cyan_atas[0])

            elif level_gn_selected in [4, 5]:

                entry_bass.delete(0, tk.END)

                entry_bass.insert(0, data_gn_cyan_atas[1])

            elif level_gn_selected in [6, 7, 8]:

                entry_bass.delete(0, tk.END)

                entry_bass.insert(0, data_gn_cyan_atas[2])

            elif level_gn_selected in [9, 10]:

                entry_bass.delete(0, tk.END)

                entry_bass.insert(0, data_gn_cyan_atas[3])

            elif level_gn_selected in [11, 12]:

                entry_bass.delete(0, tk.END)

                entry_bass.insert(0, data_gn_cyan_atas[4])


# Logika untuk memilih dan menampilkan data Sub_Gn_Cyan_Atas

        if data_sub_gn_cyan_atas:

            if level_gn_selected in [1, 2, 3, 4]:

                entry_sub_bass.delete(0, tk.END)

                entry_sub_bass.insert(0, data_sub_gn_cyan_atas[level_gn_selected - 1])

            elif level_gn_selected in [5, 6, 7, 8]:

                entry_sub_bass.delete(0, tk.END)

                entry_sub_bass.insert(0, adjust_sub_bass_value(data_sub_gn_cyan_atas[level_gn_selected - 5], 1))

            elif level_gn_selected in [9, 10, 11, 12]:

                entry_sub_bass.delete(0, tk.END)

                entry_sub_bass.insert(0, adjust_sub_bass_value(data_sub_gn_cyan_atas[level_gn_selected - 9], 2))


    except Exception as e:

        messagebox.showerror("Error", f"Terjadi kesalahan: {str(e)}")


# Fungsi untuk menyesuaikan nilai sub bass berdasarkan progres

def adjust_sub_bass_value(sub_bass_value, modifikasi_angka):

    if sub_bass_value.isdigit():

        # Menyesuaikan nilai dengan mengurangi setiap digit dengan modifikasi_angka

        adjusted_value = ''.join(str(int(char) - modifikasi_angka) if char.isdigit() else char for char in sub_bass_value)

    else:

        adjusted_value = sub_bass_value

    return adjusted_value


# Menambahkan tombol untuk memilih nada

pilih_nada_button = tk.Button(frame_top, text="Pilih Nada", command=pilih_nada)

pilih_nada_button.grid(row=6, column=1, padx=0, pady=7)


# Menambahkan entry untuk hasil

entry_bass = tk.Entry(root)

entry_bass.pack(pady=10)


entry_sub_bass = tk.Entry(root)

entry_sub_bass.pack(pady=10)


# Menjalankan main loop

root.mainloop()

```


### Penjelasan:

- **Logika Pemilihan Data:** Pada bagian ini, data dari `Gn_Cyan_Atas` diambil berdasarkan `level_gn_selected` dan diisi ke `entry_bass`. Untuk `Sub_Gn_Cyan_Atas`, data yang diambil akan diubah dengan fungsi `adjust_sub_bass_value()` untuk `level_gn` 5 hingga 12.

- **Fungsi `adjust_sub_bass_value()`:** Fungsi ini digunakan untuk menyesuaikan nilai sub bass dengan mengurangi setiap digit dari nilai asli sesuai dengan angka modifikasi yang ditentukan (1 atau 2). Jika nilai bukan angka, nilai asli tetap digunakan.

- **GUI:** Tampilan GUI telah diperluas dengan menambahkan dua `Entry` untuk menampilkan hasil (`entry_bass` dan `entry_sub_bass`) dan sebuah tombol untuk menjalankan fungsi `pilih_nada()`.

Pastikan kode ini berfungsi sesuai dengan kebutuhan Anda dengan menjalankan program dan melakukan uji coba pada setiap level_gn.


Bersambung ke ...

LOGIKA YANG DITERAPKAN PADA DATA TABEL Gn_Cyan_Atas, DAN TABEL Sub_Gn_Cyan_Atas (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...