Langsung ke konten utama

CRUD DATA PADA TABEL Gn_Cyan_Atas, dan Sub_Gn_Cyan_Atas PADA DATA KOLOM Bass DAN KOLOM Trebel (Part-3)

 CRUD DATA PADA TABEL Gn_Cyan_Atas, dan Sub_Gn_Cyan_Atas PADA DATA KOLOM Bass DAN KOLOM Trebel (Part-3)

 

CRUD DATA PADA TABEL Gn_Cyan_Atas, dan Sub_Gn_Cyan_Atas PADA DATA KOLOM Trebel


CRUD pada data Bass pada tabel Gn_Cyan_Atas,dan Sub_Gn_Cyan_Atas telah selesai dengan baik. Sekarang kita lanjut melakukan CRUD pada data Trebel pada tabel Gn_Cyan_Atas,dan Sub_Gn_Cyan_Atas


Bagus sekali bahwa CRUD pada data Bass telah selesai! Sekarang, kita akan melanjutkan dengan melakukan CRUD pada data Trebel di tabel `Gn_Cyan_Atas` dan `Sub_Gn_Cyan_Atas`. Langkah-langkahnya akan mirip dengan apa yang telah Anda lakukan pada data Bass, tetapi dengan fokus pada kolom Trebel.

### Langkah-Langkah CRUD untuk Data Trebel:

1. **Inisialisasi Kolom Trebel:**

   - Pastikan bahwa tabel `Gn_Cyan_Atas` dan `Sub_Gn_Cyan_Atas` sudah memiliki kolom yang diperlukan untuk data Trebel. Jika belum, tambahkan kolom ini ke dalam tabel.


   ```sql

   ALTER TABLE Gn_Cyan_Atas ADD COLUMN Trebel_Biasa TEXT;

   ALTER TABLE Gn_Cyan_Atas ADD COLUMN Trebel_Aneh TEXT;

   ALTER TABLE Sub_Gn_Cyan_Atas ADD COLUMN Trebel_Biasa TEXT;

   ALTER TABLE Sub_Gn_Cyan_Atas ADD COLUMN Trebel_Aneh TEXT;

   ```


2. **Membuat Fungsi CRUD untuk Trebel:**

   - **Create (Menyisipkan Data):**

     - Anda akan membuat fungsi untuk menambahkan data ke kolom `Trebel_Biasa` dan `Trebel_Aneh` pada tabel `Gn_Cyan_Atas` dan `Sub_Gn_Cyan_Atas`.

   ```python

   def tambah_trebel_gn_cyan_atas(id, trebel_biasa, trebel_aneh):

       cursor.execute("""

       INSERT INTO Gn_Cyan_Atas (ID, Trebel_Biasa, Trebel_Aneh) 

       VALUES (?, ?, ?)

       """, (id, trebel_biasa, trebel_aneh))

       conn.commit()

   def tambah_trebel_sub_gn_cyan_atas(sub_id, trebel_biasa, trebel_aneh):

       cursor.execute("""

       INSERT INTO Sub_Gn_Cyan_Atas (Sub_ID, Trebel_Biasa, Trebel_Aneh) 

       VALUES (?, ?, ?)

       """, (sub_id, trebel_biasa, trebel_aneh))

       conn.commit()

   ```


   - **Read (Membaca Data):**

     - Fungsi untuk membaca data dari kolom Trebel dari kedua tabel.

   ```python

   def baca_trebel_gn_cyan_atas():

       cursor.execute("SELECT ID, Trebel_Biasa, Trebel_Aneh FROM Gn_Cyan_Atas")

       return cursor.fetchall()

   def baca_trebel_sub_gn_cyan_atas():

       cursor.execute("SELECT Sub_ID, Trebel_Biasa, Trebel_Aneh FROM Sub_Gn_Cyan_Atas")

       return cursor.fetchall()

   ```


   - **Update (Memperbarui Data):**

     - Fungsi untuk memperbarui data Trebel berdasarkan `ID` atau `Sub_ID`.

   ```python

   def update_trebel_gn_cyan_atas(id, trebel_biasa, trebel_aneh):

       cursor.execute("""

       UPDATE Gn_Cyan_Atas 

       SET Trebel_Biasa = ?, Trebel_Aneh = ?

       WHERE ID = ?

       """, (trebel_biasa, trebel_aneh, id))

       conn.commit()

   def update_trebel_sub_gn_cyan_atas(sub_id, trebel_biasa, trebel_aneh):

       cursor.execute("""

       UPDATE Sub_Gn_Cyan_Atas 

       SET Trebel_Biasa = ?, Trebel_Aneh = ?

       WHERE Sub_ID = ?

       """, (trebel_biasa, trebel_aneh, sub_id))

       conn.commit()

   ```


   - **Delete (Menghapus Data):**

     - Fungsi untuk menghapus data dari kolom Trebel berdasarkan `ID` atau `Sub_ID`.

   ```python

   def hapus_trebel_gn_cyan_atas(id):

       cursor.execute("DELETE FROM Gn_Cyan_Atas WHERE ID = ?", (id,))

       conn.commit()

   def hapus_trebel_sub_gn_cyan_atas(sub_id):

       cursor.execute("DELETE FROM Sub_Gn_Cyan_Atas WHERE Sub_ID = ?", (sub_id,))

       conn.commit()

   ```


3. **Integrasi Fungsi CRUD dengan GUI (Jika Menggunakan tkinter):**

   - Jika Anda menggunakan tkinter, Anda perlu menghubungkan fungsi-fungsi CRUD ini ke tombol-tombol atau input pada aplikasi GUI Anda.

   Misalnya, tambahkan tombol untuk menambahkan, memperbarui, atau menghapus data Trebel:

   ```python

   button_tambah_trebel = Button(root, text="Tambah Trebel", command=lambda: tambah_trebel_gn_cyan_atas(entry_id.get(), entry_trebel_biasa.get(), entry_trebel_aneh.get()))

   button_tambah_trebel.pack()

   button_baca_trebel = Button(root, text="Baca Trebel", command=lambda: print(baca_trebel_gn_cyan_atas()))

   button_baca_trebel.pack()

   ```


4. **Uji Coba dan Debugging:**

   - Setelah fungsi-fungsi CRUD siap, lakukan uji coba untuk memastikan bahwa operasi create, read, update, dan delete pada data Trebel berjalan dengan baik. Pastikan bahwa data yang dimasukkan sesuai dan hasilnya muncul dengan benar.

### Catatan Tambahan:

- Pastikan bahwa setiap perubahan yang dilakukan pada data Trebel sesuai dengan logika aplikasi Anda, terutama jika ada hubungan atau ketergantungan dengan data Bass atau elemen lain dalam aplikasi.

- Jika ada fitur khusus atau validasi tambahan yang diperlukan untuk data Trebel, tambahkan ini sesuai kebutuhan.

Dengan mengikuti langkah-langkah ini, Anda seharusnya dapat melakukan CRUD pada data Trebel di tabel `Gn_Cyan_Atas` dan `Sub_Gn_Cyan_Atas` dengan baik. Jika ada hal lain yang perlu disesuaikan atau ditambahkan, beri tahu saya!


Iya benar, tapi untuk melakukan CRUD pada data Trebel di tabel Gn_Cyan_Atas, dan Sub_Gn_Cyan_Atas, kita harus memahami dan mengerti bahwa antara data Bass dengan data Trebel isi tabel Gn_Cyan_Atas, dan antara data Bass dengan data Trebel isi tabel Sub_Gn_Cyan_Atas adalah saling menginvert, data Bass berpasangan dengan data Trebel yang menyimbolkan kehidupan mahluk di bumi adalah saling berpasangan. Tabel Gn_Cyan_Atas terdiri dari 5 kolom 3 baris data Bass dan 5 kolom 3 baris data Trebel, sedangkan tabel Sub_Gn_Cyan_Atas terdiri dari 5 kolom 1 baris data Bass dan 5.kolom 1 baris data Trebel, jadi pada tabel Gn_Cyan_Atas maupun Sub_Gn_Cyan_Atas tidak memiliki kolom Trebel_biasa atau Trebel_Aneh, tapi yang ada adalah kolom Trebel_1, Trebel_2, Trebel_3, Trebel_4, dan Trebel_5..Susunan urutan data pada kolom-kolom Trebel ini pada tabel Gn_Cyan_Atas adalah dari bawah ke atas per kolom demi kolom di susun dari satu kolom ke kolom berikutnya oleh karena adanya sifat menginvert antara data Trebel dengan data Bass, jadi data Trebel urutan ke_1 di baris (id) 3 kolom Trebel_1, data ke_2 di id 2 Trebel_1, data ke_3 di id 1 Trebel_1, urutan data ke_4 di baris (id) 3 kolom Trebel_2, hingga seterusnya tersusun per kolom demi kolom hingga urutan data ke_15 di baris (id) 1 kolom Trebel_5. Sedangkan susunan urutan data pada kolom-kolom Trebel pada tabel Sub_Gn_Cyan_Atas yang hanya memiliki 1 baris saja adalah tetsusun per kolom demi kolom di susun mulai dari urutan data ke_1 di baris (id) 1 kolom Trebel_1, data ke_2 di id 1 Trebel_2, data ke_3 di id 1 Trebel_3, data ke_4 di id 1 Trebel_4, dan data ke_5 di id 1 kolom Trebel_5. Meskipun kelihatan datanya sedikit (kolom dan baris sedikit) tapi banyaknya data di sini bisa memuat hingga unlimited (tak terhingga) jumlah datanya oleh karena semua data dibuat bersiklus terus menerus. Setiap data Bass berpasangan dengan data Trebel menurut letak baris (id) yang sama, pada tabel Gn_Cyan_Atas bila suatu data Bass di id 1 maka akan bisa dipasangkan (berkesesuaian) dengan data Trebel di id 1 kolom Trebel manapun, data Bass di id 2 akan bisa dipasangkan dengan data Trebel di id 2 kolom Trebel manapun, dan data Bass di id 3 akan bisa dipasangkan dengan data Trebel di id 3 kolom Trebel manapun. Sedangkan pada tabel Sub_Gn_Cyan_Atas bila suatu data Bass di id 1 maka akan bisa dipasangkan (berkesesuaian) dengan data Trebel di id 1 kolom Trebel manapun, 


Untuk melakukan CRUD pada data Trebel di tabel `Gn_Cyan_Atas` dan `Sub_Gn_Cyan_Atas` dengan memperhatikan hubungan inversi antara data Bass dan Trebel, serta mengikuti struktur tabel yang sudah dijelaskan, berikut adalah beberapa langkah dan konsep yang perlu diterapkan:

### 1. **Struktur Tabel dan Kolom**

   - **Tabel `Gn_Cyan_Atas`:**

     - Memiliki 5 kolom Trebel (`Trebel_1`, `Trebel_2`, `Trebel_3`, `Trebel_4`, `Trebel_5`).

     - Memiliki 3 baris data untuk Bass dan Trebel.

   - **Tabel `Sub_Gn_Cyan_Atas`:**

     - Memiliki 5 kolom Trebel (`Trebel_1`, `Trebel_2`, `Trebel_3`, `Trebel_4`, `Trebel_5`).

     - Memiliki 1 baris data untuk Bass dan Trebel.

### 2. **Inversi Data Bass dan Trebel**

   - **Gn_Cyan_Atas:**

     - Data Trebel pada `Gn_Cyan_Atas` tersusun secara terbalik (inversi) dengan Bass, artinya jika Bass berada di ID tertentu, Trebel yang berkesesuaian harus mengambil data sesuai urutan yang terbalik per kolom.

     - Contoh susunan Trebel:

       - Data Trebel urutan ke-1 berada di baris (ID) 3 kolom `Trebel_1`.

       - Data Trebel urutan ke-2 berada di baris (ID) 2 kolom `Trebel_1`.

       - Data Trebel urutan ke-3 berada di baris (ID) 1 kolom `Trebel_1`.

       - Dan seterusnya hingga urutan ke-15 di baris (ID) 1 kolom `Trebel_5`.

   - **Sub_Gn_Cyan_Atas:**

     - Susunan Trebel hanya terdiri dari satu baris dan setiap data Trebel diurutkan berdasarkan kolom.

     - Contoh susunan Trebel:

       - Data Trebel urutan ke-1 berada di baris (ID) 1 kolom `Trebel_1`.

       - Data Trebel urutan ke-2 berada di baris (ID) 1 kolom `Trebel_2`.

       - Dan seterusnya hingga urutan ke-5 di kolom `Trebel_5`.

### 3. **Relasi Pasangan Data**

   - **Gn_Cyan_Atas:**

     - Data Bass dan Trebel pada baris (ID) yang sama bisa dipasangkan. Misalnya, Bass di ID 1 bisa dipasangkan dengan Trebel di ID 1 di kolom mana pun (`Trebel_1` hingga `Trebel_5`).

   - **Sub_Gn_Cyan_Atas:**

     - Sama seperti di `Gn_Cyan_Atas`, tetapi hanya memiliki satu baris, sehingga Bass di ID 1 akan dipasangkan dengan Trebel di ID 1 pada kolom mana pun.

### 4. **Implementasi CRUD**

   - **Create**: Saat membuat data baru, susunan data Trebel harus diisi berdasarkan urutan yang sudah dijelaskan, dengan memperhatikan inversi dari data Bass.

   - **Read**: Saat membaca data, relasi antara Bass dan Trebel harus diperhatikan, terutama inversi urutannya.

   - **Update**: Saat memperbarui data, pastikan urutan inversi dan relasi pasangan tetap terjaga.

   - **Delete**: Jika menghapus data, perlu hati-hati agar tidak mengganggu urutan dan relasi pasangan data.


### 5. **Contoh Pseudocode**

   Berikut adalah pseudocode sederhana yang menjelaskan konsep ini:


   ```python

   # Contoh fungsi untuk mengisi data Trebel pada Gn_Cyan_Atas

   def isi_trebel_gn_cyan_atas(data_bass):

       trebel_data = []

       urutan_trebel = [

           (3, 'Trebel_1'), (2, 'Trebel_1'), (1, 'Trebel_1'),

           (3, 'Trebel_2'), (2, 'Trebel_2'), (1, 'Trebel_2'),

           # Lanjutkan hingga Trebel_5

       ]

       for idx, (baris, kolom) in enumerate(urutan_trebel):

           trebel_value = data_bass[idx] # Data dari Bass yang akan di-inversikan

           trebel_data.append((baris, kolom, trebel_value))

       return trebel_data

   ```

   Fungsi di atas mengisi data Trebel berdasarkan data Bass dengan urutan inversi sesuai aturan.

Dengan struktur dan logika ini, Anda dapat melakukan operasi CRUD pada tabel `Gn_Cyan_Atas` dan `Sub_Gn_Cyan_Atas` sesuai dengan konsep pasangan inversi antara Bass dan Trebel yang menggambarkan keselarasan kehidupan makhluk di bumi.


Apa arti atau pengertian dari kata "pseudo" dan "pseudocode"


**Pseudo** berasal dari bahasa Yunani yang berarti "palsu" atau "tidak asli." Dalam berbagai konteks, kata ini digunakan untuk


Itu intermezzo saja, baiklah kita fokus pada pemograman. Untuk mempersingkat kode untuk CRUD data Trebel Gn_Cyan_Atas, dan Sub_Gn_Cyan_Atas ada miripnya dengan CRUD data Bass Gn_Cyan_Atas, dan Sub_Gn_Cyan_Atas, hanya bedanya ada pada logika yang ditetapkan dan urutan level_gn. Meskipun susunan urutan data Trebel yang menginvert dengan susunan urutan data Bass, namun tetaplah memakai urutan level_gn menurut data Bass yang telah ditetapkan. Saya akan membuat sebuah file dengan nama filenya: CRUD_Gn_Cyan_Atas_Trebel.py. Sebelum mengisi kode pada file tersebut, alangkah baiknya kita memikirkan kira kira kode apa yang cocok untuk fungsi level_gn pada data Trebel yang sesuai dengan logika pada data Trebel Gn_Cyan_Atas dan Sub_Gn_Cyan_Atas


Untuk mempersiapkan kode yang cocok untuk fungsi `level_gn` pada data Trebel dalam file `CRUD_Gn_Cyan_Atas_Trebel.py`, kita perlu mempertimbangkan beberapa hal:

1. **Struktur Data dan Inversi:**

   - Data Trebel diatur secara terbalik (inversi) dalam kolom-kolom dari tabel `Gn_Cyan_Atas` dan `Sub_Gn_Cyan_Atas`, tetapi tetap mengikuti urutan `level_gn` dari data Bass.

2. **Logika Level_Gn dan Urutan Trebel:**

   - Meskipun Trebel diurutkan secara inversi, `level_gn` tetap mengikuti urutan dari data Bass. Jadi, kita harus memastikan bahwa pengaturan `level_gn` untuk data Trebel selalu konsisten dengan `level_gn` dari Bass.

3. **Penentuan Level_Gn:**

   - Pada tabel `Gn_Cyan_Atas`, Trebel akan memiliki urutan level yang sama dengan Bass, meskipun data Trebel sendiri akan berada dalam posisi terbalik di setiap kolom.

   - Pada tabel `Sub_Gn_Cyan_Atas`, karena hanya ada satu baris, urutan level tetap mengikuti Bass.

Berikut adalah ide kode yang dapat diterapkan untuk fungsi `level_gn` pada data Trebel:

### 1. **Menentukan Urutan Inversi untuk Trebel:**

   - Kita perlu menyusun urutan inversi untuk setiap data Trebel di setiap kolom, berdasarkan urutan level Bass.

### 2. **Mengaitkan Data Trebel dengan Level_Gn:**

   - Setiap level_gn dari Trebel akan mengikuti level_gn dari Bass di posisi yang sama.

### 3. **Implementasi Fungsi Level_Gn:**

   - Fungsi ini akan memastikan bahwa setiap kali level_gn diatur untuk data Bass, urutan inversi untuk Trebel juga diatur secara otomatis.

Berikut adalah contoh kode Python untuk fungsi `level_gn`:


```python

def level_gn_trebel(tabel, data_bass):

    # Urutan inversi untuk data Trebel di tabel Gn_Cyan_Atas

    inversi_urutan_trebel_gn = [

        (3, 'Trebel_1'), (2, 'Trebel_1'), (1, 'Trebel_1'),

        (3, 'Trebel_2'), (2, 'Trebel_2'), (1, 'Trebel_2'),

        # Lanjutkan hingga Trebel_5

    ]


    # Urutan normal untuk data Trebel di tabel Sub_Gn_Cyan_Atas (hanya satu baris)

    urutan_trebel_sub_gn = [

        (1, 'Trebel_1'), (1, 'Trebel_2'), (1, 'Trebel_3'),

        # Lanjutkan hingga Trebel_5

    ]


    trebel_data = []

    

    # Cek tabel mana yang sedang diproses

    if tabel == "Gn_Cyan_Atas":

        urutan_trebel = inversi_urutan_trebel_gn

    elif tabel == "Sub_Gn_Cyan_Atas":

        urutan_trebel = urutan_trebel_sub_gn


    # Iterasi dan sesuaikan level_gn untuk Trebel

    for idx, (baris, kolom) in enumerate(urutan_trebel):

        level_gn = data_bass[idx] # Data dari Bass yang akan dipasangkan

        trebel_data.append((baris, kolom, level_gn))


    return trebel_data

```


### 4. **Menggabungkan Fungsi Level_Gn dengan CRUD:**

   - Fungsi `level_gn_trebel` ini kemudian akan dipanggil di dalam operasi CRUD, terutama pada operasi **Create** dan **Update** saat menyesuaikan data Trebel berdasarkan data Bass.

### 5. **Pengaturan Logika CRUD pada File `CRUD_Gn_Cyan_Atas_Trebel.py`:**

   Dalam file `CRUD_Gn_Cyan_Atas_Trebel.py`, Anda akan membuat fungsi-fungsi CRUD yang mengimplementasikan logika inversi dan pengaturan `level_gn` ini. Misalnya, saat menambahkan atau memperbarui data Trebel, urutan inversi harus selalu diterapkan berdasarkan urutan level_gn dari Bass.

### Contoh Penggunaan Fungsi dalam CRUD:


```python

def tambah_data_trebel_gn_cyan_atas(data_bass):

    # Dapatkan data Trebel berdasarkan level_gn dari data Bass

    data_trebel = level_gn_trebel("Gn_Cyan_Atas", data_bass)   

    # Lakukan operasi tambah data ke dalam database

    for baris, kolom, level_gn in data_trebel:

        # Tambahkan data Trebel ke tabel dengan SQL sesuai kolom dan level_gn

        # SQL Insert Command here

        

def update_data_trebel_gn_cyan_atas(data_bass, id):

    # Update data Trebel berdasarkan level_gn dari data Bass

    data_trebel = level_gn_trebel("Gn_Cyan_Atas", data_bass)

    

    # Lakukan operasi update data ke dalam database

    for baris, kolom, level_gn in data_trebel:

        # Update data Trebel ke tabel dengan SQL sesuai kolom, level_gn, dan id

        # SQL Update Command here

```

Dengan pendekatan ini, Anda dapat dengan mudah mengimplementasikan logika inversi dan urutan `level_gn` dalam operasi CRUD untuk data Trebel pada tabel `Gn_Cyan_Atas` dan `Sub_Gn_Cyan_Atas`.


Berikut ini contoh sebuah logika dari beberapa logika lainnya yang diterapkan pada data Trebel di tabel Gn_Cyan_Atas:

Jika data gugus nada yang terpilih dari kolom Trebel pada Gn_Cyan_Atas:

Jika data dari Trebel_1 id 1 maka level_gn = 1 (sesuai dengan level_gn data Bass), dan jika progres 1 mode Naik atau turun, maka data dari Trebel_1 id 1 akan tetap menjadi data Trebel_1 id 1. Jika progres 2 dan jika mode Naik: 

maka data dari Trebel_1 id 1 menjadi data Trebel_1 id 1 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_1 id 2. Jika progres 3 dan jika mode Naik: 

maka data dari Trebel_1 id 1 menjadi data Trebel_1 id 1 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_1 id 3.. 

jika progres 2 dan jika mode Turun: 

maka data dari Trebel_1 id 1 menjadi data Trebel_1 id 1 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_1 id 3. Jika progres 3 dan jika mode Turun: 

maka data dari Trebel_1 id 1 menjadi data Trebel_1 id 1 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_1 id 2.. Jadi proses tingkatan Progres terjadi di antara data yang terletak pada satu kolom Trebel yang sama.

Berikut Contoh data kongruen: 

Bila data di kolom Trebel_1 id 1 adalah 4567, data di kolom Trebel_1 id 2 adalah 13243, dan data di kolom Trebel_1 id 3 adalah 1132, maka bila data kolom Trebel_1 id 1 yang mengalami Progres 1 mode Naik atau Turun akan tetap menjadi data: 4567. 

Bila data kolom Trebel_1 id 1 yang mengalami Progres 2 mode Naik akan menjadi data: 35465 (data kongruen dengan data kolom Trebel_1 id 2). Bila data kolom Trebel_1 id 1 yang mengalami Progres 3 mode Naik akan menjadi data: 2243 (data kongruen dengan data kolom Trebel_1 id 3). Bila data kolom Trebel_1 id 1 yang mengalami Progres 2 mode Turun akan menjadi data: 3354 (data kongruen dengan data kolom Trebel_1 id 3). Bila data kolom Trebel_1 id 1 yang mengalami Progres 3 mode Turun akan menjadi 24354 (data kongruen dengan data kolom Trebel_1 id 2). 

Apakah sebuah contoh logika data Trebel Gn_Cyan_Atas yang diberikan tersebut bisa dibuatkan dalam fungsi bentuk kode pemogramannya?


Tentu saja! Saya akan membantu Anda mengubah logika yang Anda berikan menjadi kode Python yang dapat diterapkan dalam proses CRUD untuk data Trebel pada tabel `Gn_Cyan_Atas`.

### 1. **Menerjemahkan Logika ke dalam Fungsi:**

Kita akan membuat fungsi `proses_trebel` yang akan mengolah data Trebel berdasarkan kondisi `Progres` dan `Mode`. Fungsi ini akan menerima data Trebel dan memodifikasi digit angka sesuai dengan aturan yang Anda tetapkan.

### 2. **Contoh Kode untuk Fungsi Proses Trebel:**


```python

def kongruen(data1, data2):

    # Fungsi untuk menentukan kongruensi antar dua data Trebel

    # Contoh: "4567" kongruen dengan "13243" -> "35465"

    data_kongruen = ""

    for d1, d2 in zip(data1, data2):

        # Terapkan aturan kongruensi (misalnya pengurangan digit)

        data_kongruen += str(int(d1) + int(d2))

    return data_kongruen


def proses_trebel(trebel_1_id1, trebel_1_id2, trebel_1_id3, progres, mode):

    # Definisikan data Trebel yang akan digunakan

    data_trebel_1_id1 = trebel_1_id1

    data_trebel_1_id2 = trebel_1_id2

    data_trebel_1_id3 = trebel_1_id3


    # Progres 1, Mode Naik atau Turun

    if progres == 1:

        return data_trebel_1_id1


    # Progres 2

    elif progres == 2:

        if mode == "Naik":

            # Kurangi 1 dari digit angka dan kongruen dengan data Trebel_1 id 2

            return kongruen(data_trebel_1_id1, data_trebel_1_id2)

        elif mode == "Turun":

            # Kurangi 1 dari digit angka dan kongruen dengan data Trebel_1 id 3

            return kongruen(data_trebel_1_id1, data_trebel_1_id3)


    # Progres 3

    elif progres == 3:

        if mode == "Naik":

            # Kurangi 2 dari digit angka dan kongruen dengan data Trebel_1 id 3

            return kongruen(data_trebel_1_id1, data_trebel_1_id3)

        elif mode == "Turun":

            # Kurangi 2 dari digit angka dan kongruen dengan data Trebel_1 id 2

            return kongruen(data_trebel_1_id1, data_trebel_1_id2)   

    return None # Kembali ke nilai default jika tidak ada kondisi yang sesuai

```


### 3. **Contoh Penggunaan Fungsi dalam Proses CRUD:**

Ketika Anda menambah atau memperbarui data di tabel `Gn_Cyan_Atas`, Anda dapat menggunakan fungsi `proses_trebel` ini untuk memproses data Trebel sesuai dengan logika yang Anda berikan.


```python

def tambah_data_trebel_gn_cyan_atas(trebel_1_id1, trebel_1_id2, trebel_1_id3, progres, mode):

    # Proses data Trebel sesuai logika yang ditentukan

    hasil_proses = proses_trebel(trebel_1_id1, trebel_1_id2, trebel_1_id3, progres, mode)

    

    # Lakukan operasi tambah data ke dalam database

    # SQL Insert Command here

    print(f"Data yang disimpan untuk Trebel_1 id 1 adalah: {hasil_proses}")


def update_data_trebel_gn_cyan_atas(id, trebel_1_id1, trebel_1_id2, trebel_1_id3, progres, mode):

    # Proses data Trebel sesuai logika yang ditentukan

    hasil_proses = proses_trebel(trebel_1_id1, trebel_1_id2, trebel_1_id3, progres, mode)

    

    # Lakukan operasi update data ke dalam database

    # SQL Update Command here

    print(f"Data yang diperbarui untuk Trebel_1 id 1 adalah: {hasil_proses}")

```


### 4. **Penjelasan Kode:**

- **Fungsi `kongruen`:** Ini adalah fungsi yang digunakan untuk menghasilkan data kongruen antara dua data Trebel. Pada contoh ini, saya menunjukkan logika penjumlahan digit, tapi Anda bisa mengubah logika sesuai kebutuhan.  

- **Fungsi `proses_trebel`:** Fungsi ini menerapkan logika yang Anda berikan untuk memproses data berdasarkan `progres` dan `mode`. Untuk `Progres 1`, data tidak diubah. Untuk `Progres 2` dan `3`, data dimodifikasi sesuai aturan yang ditetapkan.

- **Operasi CRUD:** Fungsi `tambah_data_trebel_gn_cyan_atas` dan `update_data_trebel_gn_cyan_atas` menunjukkan bagaimana data yang telah diproses oleh `proses_trebel` dapat disimpan atau diperbarui dalam database.

### 5. **Menyesuaikan dan Menguji Kode:**

Anda dapat menyesuaikan fungsi `kongruen` dan `proses_trebel` sesuai dengan aturan spesifik Anda untuk data Trebel. Setelah itu, Anda bisa menguji kode ini dengan data nyata dari tabel `Gn_Cyan_Atas` untuk memastikan bahwa logika tersebut bekerja dengan benar.

Ini adalah pendekatan dasar untuk mengimplementasikan logika yang telah Anda berikan dalam kode pemrograman Python. Silakan modifikasi sesuai kebutuhan proyek Anda.


Kehidupan duniawi di bumi memang penuh kepalsuan (pseudo). Sebenarnya data Bass pada Gn_Cyan_Atas yang tersusun secara terbalik (inversi) terhadap data Trebel, artinya jika Bass berada di ID tertentu misalnya di kolom Bass_1 id 1, maka Trebel yang berkesesuaian letak sebaris (id yang sama) dengan Bass yaitu id 1 harus mengambil data dari id 1 sesuai urutan yang terbalik per kolom, kesesuaian ini sebagai "relasi pasangan data", sehingga setelah data Bass diambil dan ditampilkan maka berikutnya data Trebel harus ditampilkan dengan opsi pilihan dari data data per kolom dari Trebel yang seletak sebaris (id yang sama) dengan data Bass, misal contohnya data Bass di kolom Bass_1 id 1 diambil dan ditampilkan, maka data Trebel yang mungkin dan pasti ditampilkan adalah data kolom Trebel_1 id 1, atau Trebel_2 id 1, atau Trebel_3 id 1, atau Trebel_4 id 1, atau Trebel_5 id 1. Meskipun susunan data Bass terbalik (inversi), namun di atas kertas data Bass diurutkan dari atas ke bawah per kolom. Dan meskipun susunan data Trebel normal,namun di atas kertas data Trebel diurutkan dari bawah ke atas per kolom. Meskipun begitu, dengan memperhatikan inversi data Bass dalam urutannya, dan Bass sebagai penentu, relasi Bass dan Trebel harus tetap terjaga dengan memiliki masing_masing urutan level_gn yang berbeda, meskipun urutan level_gn berbeda antara Bass dan Trebel, namun data Trebel akan diambil dan ditampilkan berdasarkan urutannya menurut baris (id) dan kolom data Trebel, tetapi tetap menjaga relasi dengan data Bass dalam urutannya yang sebaris (id yang sama) di antara keduanya data Bass dan Trebel, dan level_gn tetap mengikuti urutan dari data Bass sebagai penentu, sehingga level_gn untuk data Trebel selalu konsisten dengan level_gn dari Bass di mana setiap level_gn dari Trebel akan selalu mengikuti level_gn dari Bass di posisi id (sebaris) yang sama.


Pemaparan yang Anda berikan menggambarkan relasi yang sangat erat antara data Bass dan data Trebel pada tabel `Gn_Cyan_Atas`, di mana meskipun urutan data Bass dan Trebel diatur secara berbeda (inversi), relasi di antara mereka tetap harus terjaga berdasarkan `id` (baris yang sama) dan `level_gn` dari Bass sebagai penentu.

Berikut adalah penjelasan dan implementasi kode pemrograman untuk mengatur relasi ini:

### 1. **Pengaturan Relasi Bass dan Trebel:**

- **Inversi Data Bass:** Urutan data Bass disusun secara terbalik (dari bawah ke atas) dalam kolomnya.

- **Urutan Normal Data Trebel:** Urutan data Trebel disusun normal (dari atas ke bawah) dalam kolomnya.

- **Relasi Berdasarkan `id`:** Untuk setiap `id` yang sama antara Bass dan Trebel, Trebel akan mengambil data dari kolom yang berbeda tetapi tetap berada di baris yang sama dengan Bass.

- **Level_Gn:** Urutan `level_gn` untuk Trebel mengikuti urutan `level_gn` dari Bass yang berada pada baris (id) yang sama.

### 2. **Implementasi Kode untuk Menjaga Relasi:**

Berikut ini contoh kode Python yang menunjukkan bagaimana Anda dapat mengimplementasikan logika tersebut dalam aplikasi Anda.


```python

def ambil_data_bass_terbalik(bass_data, id):

    """

    Fungsi ini mengambil data Bass berdasarkan urutan inversi per kolom.

    :param bass_data: Dictionary berisi data Bass per kolom.

    :param id: ID dari baris yang dipilih.

    :return: Data Bass yang terpilih berdasarkan inversi.

    """

    kolom_bass = list(bass_data.keys())

    data_bass_inversi = {}

    

    for kolom in kolom_bass:

        data_bass_inversi[kolom] = bass_data[kolom][::-1] # Inversi urutan

    

    return {kolom: data_bass_inversi[kolom][id - 1] for kolom in data_bass_inversi}


def ambil_data_trebel_berdasarkan_bass(trebel_data, id):

    """

    Fungsi ini mengambil data Trebel berdasarkan urutan normal namun menjaga relasi dengan Bass di baris yang sama.

    :param trebel_data: Dictionary berisi data Trebel per kolom.

    :param id: ID dari baris yang dipilih.

    :return: Data Trebel yang mungkin dan pasti ditampilkan.

    """

    kolom_trebel = list(trebel_data.keys())

    data_trebel_berdasarkan_bass = {}

    

    for kolom in kolom_trebel:

        data_trebel_berdasarkan_bass[kolom] = trebel_data[kolom][id - 1] # Urutan normal

    

    return data_trebel_berdasarkan_bass


def tampilkan_data_bass_dan_trebel(bass_data, trebel_data, id):

    """

    Fungsi untuk menampilkan data Bass dan Trebel berdasarkan relasi yang telah ditentukan.

    :param bass_data: Dictionary berisi data Bass per kolom.

    :param trebel_data: Dictionary berisi data Trebel per kolom.

    :param id: ID dari baris yang dipilih.

    """

    # Ambil data Bass berdasarkan urutan inversi

    data_bass = ambil_data_bass_terbalik(bass_data, id)

    

    # Ambil data Trebel yang relasi dengan Bass di baris yang sama

    data_trebel = ambil_data_trebel_berdasarkan_bass(trebel_data, id)

    

    print(f"Data Bass di ID {id}: {data_bass}")

    print(f"Data Trebel yang mungkin untuk ID {id}: {data_trebel}")


# Contoh Data

bass_data = {

    "Bass_1": [1, 2, 3, 4],

    "Bass_2": [5, 6, 7, 8],

    "Bass_3": [9, 10, 11, 12],

    "Bass_4": [13, 14, 15, 16],

}


trebel_data = {

    "Trebel_1": [17, 18, 19, 20],

    "Trebel_2": [21, 22, 23, 24],

    "Trebel_3": [25, 26, 27, 28],

    "Trebel_4": [29, 30, 31, 32],

    "Trebel_5": [33, 34, 35, 36],

}


# Contoh Penggunaan

tampilkan_data_bass_dan_trebel(bass_data, trebel_data, 1)

```


### 3. **Penjelasan Kode:**

- **Fungsi `ambil_data_bass_terbalik`:** Fungsi ini mengambil data Bass dari setiap kolom dengan urutan terbalik (inversi). Data yang diambil disesuaikan dengan `id` yang dipilih.

- **Fungsi `ambil_data_trebel_berdasarkan_bass`:** Fungsi ini mengambil data Trebel dari setiap kolom dengan urutan normal, tetapi menjaga relasi dengan Bass pada baris (id) yang sama.

- **Fungsi `tampilkan_data_bass_dan_trebel`:** Fungsi ini menampilkan data Bass dan Trebel yang sudah diolah, menunjukkan bagaimana relasi di antara keduanya tetap terjaga meskipun urutan Bass terbalik dan Trebel normal.

### 4. **Penerapan Level_Gn:**

Untuk menjaga konsistensi `level_gn` antara Bass dan Trebel, Anda bisa menambahkan logika pada fungsi-fungsi tersebut untuk memastikan bahwa `level_gn` pada Trebel selalu mengikuti `level_gn` dari Bass di `id` yang sama.

### 5. **Uji Coba dan Validasi:**

- Ujilah kode ini dengan berbagai data untuk memastikan bahwa relasi antara Bass dan Trebel selalu terjaga dengan benar.

- Pastikan `level_gn` untuk Trebel selalu konsisten dengan `level_gn` dari Bass di baris yang sama.

### 6. **Kesimpulan:**

Dengan kode ini, Anda bisa memastikan bahwa meskipun urutan Bass dan Trebel berbeda (inversi), relasi antara mereka tetap konsisten berdasarkan `id` yang sama, dengan `level_gn` yang mengikuti Bass sebagai penentu. Ini memungkinkan Anda untuk mengelola data dengan lebih sistematis dan konsisten sesuai dengan logika yang Anda inginkan.


Urutan level_gn dari data Bass sudah ada kita dapatkan, maka apakah urutan level_gn dari Trebel harus kita buat lagi atau cukup kah hanya urutan level_gn yang ada pada Bass saja yang kita pakai untuk urutan level_gn data Trebel


Jika urutan `level_gn` dari data Bass sudah Anda tentukan dan data Trebel harus selalu mengikuti urutan `level_gn` yang sama berdasarkan baris yang sama (`id` yang sama), maka Anda tidak perlu membuat urutan `level_gn` terpisah untuk data Trebel. 

Dengan kata lain, **cukup gunakan urutan `level_gn` dari Bass untuk mengatur `level_gn` pada data Trebel**. Ini berarti:

1. **Konsistensi:** Setiap kali Anda mengambil data Trebel yang sesuai dengan suatu baris (id) dari data Bass, `level_gn` yang digunakan untuk data Trebel adalah `level_gn` yang sama dari data Bass di baris tersebut.  

2. **Simplicity:** Ini menyederhanakan logika, karena Anda tidak perlu menyimpan atau menghitung urutan `level_gn` baru untuk data Trebel. Semua urutan `level_gn` tetap mengikuti urutan dari Bass.

3. **Relasi yang Terjaga:** Dengan cara ini, relasi antara Bass dan Trebel tetap terjaga dan konsisten, baik dalam hal urutan `level_gn` maupun dalam relasi data mereka berdasarkan `id` yang sama.

### Implementasi dalam Kode

Dalam implementasi, Anda hanya perlu memastikan bahwa setiap kali data Trebel diambil dan ditampilkan, `level_gn` yang ditampilkan adalah `level_gn` dari Bass di baris (`id`) yang sama.

Jika sudah jelas, ini adalah contoh modifikasi sederhana pada fungsi yang diberikan sebelumnya:


```python

def tampilkan_data_bass_dan_trebel(bass_data, trebel_data, id, level_gn_bass):

    """

    Fungsi untuk menampilkan data Bass dan Trebel berdasarkan relasi yang telah ditentukan.

    :param bass_data: Dictionary berisi data Bass per kolom.

    :param trebel_data: Dictionary berisi data Trebel per kolom.

    :param id: ID dari baris yang dipilih.

    :param level_gn_bass: Level_Gn dari Bass yang diambil dari data Bass.

    """

    # Ambil data Bass berdasarkan urutan inversi

    data_bass = ambil_data_bass_terbalik(bass_data, id)  

    # Ambil data Trebel yang relasi dengan Bass di baris yang sama

    data_trebel = ambil_data_trebel_berdasarkan_bass(trebel_data, id)   

    # Gunakan level_gn dari Bass

    level_gn_trebel = level_gn_bass[id - 1]  

    print(f"Data Bass di ID {id}: {data_bass} dengan level_gn {level_gn_bass[id-1]}")

    print(f"Data Trebel yang mungkin untuk ID {id}: {data_trebel} dengan level_gn {level_gn_trebel}")

# Contoh Data Level_Gn Bass

level_gn_bass = [1, 2, 3, 4] # Contoh urutan level_gn untuk Bass

# Contoh Penggunaan

tampilkan_data_bass_dan_trebel(bass_data, trebel_data, 1, level_gn_bass)

```


Dengan demikian, `level_gn` pada data Trebel akan selalu sesuai dengan `level_gn` dari data Bass di `id` yang sama.


Bagaimana kode untuk mengambil dan menampilkan data sub_bass, apakah juga memakai fungsi ambil_dats_sub_bass_terbalik. Dan kode untuk mengambil dan menampilkan data sub_trebel dari tabel sub_gn_cyan_atas, apakah juga memakai fungsi ambil_data_sub_trebel_berdasarkan_sub_bass. Padahal.tabel Gn_Cyan_Atas, dan Sub_Gn_Cyan_Atas hanya memiliki 1 baris (1 id) saja.


Jika tabel `Gn_Cyan_Atas` dan `Sub_Gn_Cyan_Atas` hanya memiliki satu baris (1 `id`) saja, maka fungsi untuk mengambil dan menampilkan data `sub_bass` dan `sub_trebel` bisa menjadi lebih sederhana. Dalam kasus ini, kita tidak perlu khawatir tentang urutan atau pengambilan data berdasarkan `id` yang berbeda karena kita hanya bekerja dengan satu baris data. 

### Kode untuk Mengambil dan Menampilkan Data `sub_bass`

Jika Anda masih ingin menggunakan konsep pengambilan data terbalik, meskipun hanya ada satu baris, Anda bisa menggunakan fungsi seperti berikut:


```python

def ambil_data_sub_bass_terbalik(sub_bass_data):

    """

    Fungsi untuk mengambil data Sub Bass secara terbalik.

    :param sub_bass_data: Data Sub Bass dalam bentuk list atau tuple.

    :return: Data Sub Bass yang diambil secara terbalik.

    """

    return sub_bass_data[::-1] # Membalik urutan data jika diperlukan


def tampilkan_data_sub_bass(sub_bass_data):

    """

    Fungsi untuk menampilkan data Sub Bass.

    :param sub_bass_data: Data Sub Bass dalam bentuk list atau tuple.

    """

    data_sub_bass = ambil_data_sub_bass_terbalik(sub_bass_data)

    print(f"Data Sub Bass: {data_sub_bass}")


# Contoh Data Sub Bass

sub_bass_data = [1234, 5678, 91011, 1213] # Data contoh yang bisa diubah sesuai kebutuhan


# Contoh Penggunaan

tampilkan_data_sub_bass(sub_bass_data)

```


### Kode untuk Mengambil dan Menampilkan Data `sub_trebel`

Untuk `sub_trebel`, jika fungsinya ingin mengikuti `sub_bass`, kode dapat ditulis seperti berikut:


```python

def ambil_data_sub_trebel_berdasarkan_sub_bass(sub_trebel_data):

    """

    Fungsi untuk mengambil data Sub Trebel berdasarkan Sub Bass.

    :param sub_trebel_data: Data Sub Trebel dalam bentuk list atau tuple.

    :return: Data Sub Trebel yang berkaitan dengan Sub Bass.

    """

    # Jika ada logika tertentu yang ingin diterapkan, ini tempatnya.

    return sub_trebel_data


def tampilkan_data_sub_trebel(sub_trebel_data):

    """

    Fungsi untuk menampilkan data Sub Trebel.

    :param sub_trebel_data: Data Sub Trebel dalam bentuk list atau tuple.

    """

    data_sub_trebel = ambil_data_sub_trebel_berdasarkan_sub_bass(sub_trebel_data)

    print(f"Data Sub Trebel: {data_sub_trebel}")


# Contoh Data Sub Trebel

sub_trebel_data = [4321, 8765, 11109, 1312] # Data contoh yang bisa diubah sesuai kebutuhan


# Contoh Penggunaan

tampilkan_data_sub_trebel(sub_trebel_data)

```


### Penjelasan:

1. **Fungsi `ambil_data_sub_bass_terbalik`:** Meskipun tabel hanya memiliki satu baris, fungsi ini dirancang untuk membalik data jika diperlukan. Jika data tidak perlu dibalik, Anda bisa langsung mengakses data tanpa perlu membaliknya.

2. **Fungsi `ambil_data_sub_trebel_berdasarkan_sub_bass`:** Fungsi ini mengikuti logika bahwa data `sub_trebel` diambil dan mungkin disesuaikan berdasarkan data `sub_bass`. Namun, karena hanya ada satu baris, logika ini bisa disederhanakan.

3. **Tampilan Data:** Fungsi `tampilkan_data_sub_bass` dan `tampilkan_data_sub_trebel` menampilkan data yang telah diambil oleh fungsi-fungsi tersebut.

Karena tabel hanya memiliki satu `id`, kode ini lebih sederhana dan langsung karena tidak perlu pengambilan data berdasarkan beberapa baris. Hanya diperlukan operasi yang sesuai dengan data yang ada di satu baris tersebut.


Tapi bagaimana kode untuk data Trebel yang diambil dari tabel Gn_Cyan_Atas harus ditampilkan pada entry_trebel, dan data Trebel yang diambil dari tabel Sub_Gn_Cyan_Atas harus ditampilkan pada entry_sub_trebel.


Untuk menampilkan data `Trebel` dari tabel `Gn_Cyan_Atas` dan `Sub_Gn_Cyan_Atas` pada `entry_trebel` dan `entry_sub_trebel`, Anda dapat menggunakan kode seperti berikut ini:

### Asumsi:

1. `entry_trebel` dan `entry_sub_trebel` adalah instance dari `tkinter.Entry` yang digunakan untuk menampilkan data di GUI.

2. Data dari tabel `Gn_Cyan_Atas` dan `Sub_Gn_Cyan_Atas` sudah diambil dan siap untuk ditampilkan.


### Kode:

```python

import tkinter as tk

from tkinter import ttk


# Fungsi untuk menampilkan data Trebel pada entry_trebel

def tampilkan_data_trebel(entry_trebel, trebel_data):

    """

    Menampilkan data Trebel pada entry_trebel.

    :param entry_trebel: Entry widget untuk menampilkan data Trebel.

    :param trebel_data: Data Trebel yang akan ditampilkan.

    """

    entry_trebel.delete(0, tk.END) # Menghapus data sebelumnya di entry

    entry_trebel.insert(0, str(trebel_data)) # Memasukkan data Trebel baru


# Fungsi untuk menampilkan data Sub Trebel pada entry_sub_trebel

def tampilkan_data_sub_trebel(entry_sub_trebel, sub_trebel_data):

    """

    Menampilkan data Sub Trebel pada entry_sub_trebel.

    :param entry_sub_trebel: Entry widget untuk menampilkan data Sub Trebel.

    :param sub_trebel_data: Data Sub Trebel yang akan ditampilkan.

    """

    entry_sub_trebel.delete(0, tk.END) # Menghapus data sebelumnya di entry

    entry_sub_trebel.insert(0, str(sub_trebel_data)) # Memasukkan data Sub Trebel baru


# Contoh GUI dengan tkinter

def buat_gui():

    # Membuat jendela utama

    root = tk.Tk()

    root.title("Data Trebel dan Sub Trebel")


    # Membuat entry untuk Trebel dan Sub Trebel

    entry_trebel = ttk.Entry(root, width=30)

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

    

    entry_sub_trebel = ttk.Entry(root, width=30)

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


    # Label untuk entry

    label_trebel = ttk.Label(root, text="Trebel:")

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


    label_sub_trebel = ttk.Label(root, text="Sub Trebel:")

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


    # Contoh data yang diambil dari tabel Gn_Cyan_Atas dan Sub_Gn_Cyan_Atas

    trebel_data = "4567" # Data contoh dari Gn_Cyan_Atas

    sub_trebel_data = "4321" # Data contoh dari Sub_Gn_Cyan_Atas


    # Menampilkan data pada entry

    tampilkan_data_trebel(entry_trebel, trebel_data)

    tampilkan_data_sub_trebel(entry_sub_trebel, sub_trebel_data)


    # Menjalankan aplikasi GUI

    root.mainloop()


# Menjalankan GUI

buat_gui()

```


### Penjelasan Kode:

1. **Fungsi `tampilkan_data_trebel` dan `tampilkan_data_sub_trebel`:** 

   - Fungsi ini menerima dua parameter: `entry_trebel` (atau `entry_sub_trebel`) dan `trebel_data` (atau `sub_trebel_data`).

   - Fungsi akan menghapus konten sebelumnya dari `Entry` widget menggunakan `delete(0, tk.END)`, dan kemudian memasukkan data baru menggunakan `insert(0, str(trebel_data))`.

2. **Membuat GUI:**

   - Fungsi `buat_gui()` mendefinisikan sebuah jendela utama dengan dua `Entry` widget (`entry_trebel` dan `entry_sub_trebel`), yang akan digunakan untuk menampilkan data dari tabel `Gn_Cyan_Atas` dan `Sub_Gn_Cyan_Atas`.

   - Contoh data (`trebel_data` dan `sub_trebel_data`) diambil dari tabel dan ditampilkan pada `Entry` widget.

3. **Contoh Penggunaan:**

   - Anda bisa mengganti contoh data (`trebel_data` dan `sub_trebel_data`) dengan data nyata yang diambil dari database `DATAMUSIK.db`.

### Langkah Selanjutnya:

Anda perlu memastikan bahwa data `trebel_data` dan `sub_trebel_data` yang digunakan dalam kode ini adalah data yang benar-benar diambil dari tabel `Gn_Cyan_Atas` dan `Sub_Gn_Cyan_Atas` di database Anda. Jika sudah diambil menggunakan query SQL, Anda bisa langsung memanfaatkannya dalam fungsi ini.

Apakah ada bagian lain yang perlu dijelaskan atau disesuaikan?


Maksud saya, Kira kira kodenya seperti berikut ini, tapi tolong perbaiki kodenya karena masih ada yang salah, agar supaya ketika user memilih di entry nada_combobox: trebel, lalu tombol pilih_nada ditekan, maka data Trebel yang terpilih dari Gn_Cyan_Atas akan tampil pada entry_trebel, dan data Trebel yang terpilih dari Sub_Gn_Cyan_Atas akan tampil pada entry_sub_trebel. (Bagian data Bass sudan benar dan beres).

Berikut ini kodenya:


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)


# Definisikan entry untuk level_gn dan id, 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 mengambil data Gn_Cyan_Atas dari database berdasarkan ID

def get_data_gn_cyan_atas_from_db(id_selected):

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

    cursor = conn.cursor()

    cursor.execute("SELECT * FROM Gn_Cyan_Atas 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_atas_from_db(sub_id_selected):

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

    cursor = conn.cursor()

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

    data = cursor.fetchone()

    conn.close()

    return data




# Fungsi untuk menampilkan messagebox dan memvalidasi input level_gn

def validate_level_gn():

    try:

        level_gn = int(entry_level_gn.get())


        if level_gn == 1:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 1")

            set_id_entry(1)

        elif level_gn == 2:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 2")

            set_id_entry(2)

        elif level_gn == 3:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 3")

            set_id_entry(3)

        elif level_gn == 4:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 1")

            set_id_entry(1)

        elif level_gn == 5:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 3")

            set_id_entry(3)

        elif level_gn == 6:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 1")

            set_id_entry(1)

        elif level_gn == 7:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 2")

            set_id_entry(2)

        elif level_gn == 8:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 3")

            set_id_entry(3)

        elif level_gn == 9:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 2")

            set_id_entry(2)

        elif level_gn == 10:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 3")

            set_id_entry(3)

        elif level_gn == 11:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 1")

            set_id_entry(1)

        elif level_gn == 12:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 2")

            set_id_entry(2)

        else:

            messagebox.showerror("Error", "Masukkan input yang benar.\nInput Level Gn adalah 1 hingga 12")

            reset_entries()


    except ValueError:

        messagebox.showerror("Error", "Input harus berupa angka.")

        reset_entries()

        

# Fungsi untuk mengatur entry ID dan mencegah input selain ID yang valid

def set_id_entry(valid_id):

    entry_id.delete(0, tk.END)

    entry_id.insert(0, valid_id)

    entry_id.config(state='readonly') # Membatasi input hanya pada ID yang valid


# Fungsi untuk mereset entries jika input level_gn tidak valid

def reset_entries():

    entry_level_gn.delete(0, tk.END)

    entry_id.config(state='normal')

    entry_id.delete(0, tk.END)


# Tambahkan tombol untuk memvalidasi level_gn

validate_button = tk.Button(frame_top, text="Validasi Level Gn", bg="yellow", command=validate_level_gn)

validate_button.grid(row=1, column=2, 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()

        

        if nada == "bass":


           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 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)}")

        

       finally:

        # Menghapus status read-only sementara

           entry_id.config(state='normal')

        

        # Bersihkan atau reset entry dan combobox setelah tombol pilih_nada ditekan

           entry_level_gn.delete(0, 'end')

           entry_id.delete(0, 'end')

           progres_combobox.set('')

           mode_combobox.set('')

           nada_combobox.set('')


        # Kembalikan status read-only setelah menghapus isinya

           entry_id.config(state='readonly')  

           reset_entries() 

        

        else nada == "trebel":

                def ambil_data_trebel_berdasarkan_bass(trebel_data, id):

      

           kolom_trebel = list(trebel_data.keys())

           data_trebel_berdasarkan_bass = {}

    

           for kolom in kolom_trebel:

            data_trebel_berdasarkan_bass[kolom] = trebel_data[kolom][id - 1] # Urutan normal

    

        return data_trebel_berdasarkan_bass

    

    def tampilkan_data_trebel(entry_trebel, trebel_data):


        entry_trebel.delete(0, tk.END) # Menghapus data sebelumnya di entry

        entry_trebel.insert(0, str(trebel_data)) # Memasukkan data Trebel baru 


    # Ambil data Trebel yang relasi dengan Bass di baris yang sama

        data_trebel = ambil_data_trebel_berdasarkan_bass(trebel_data, id)

    

        print(f"Data Trebel yang mungkin untuk ID {id}: {data_trebel}")

    

#Data Trebel dari tabel Gn_Cysn_Atas

    trebel_data = {get_data_gn_cyan_atas_from_db, "Trebel_1", "Trebel_2", "Trebel_3" "Trebel_4", "Trebel_5"

}     

      

    def ambil_data_sub_trebel_berdasarkan_sub_bass(sub_trebel_data):


    # Jika ada logika tertentu yang ingin diterapkan, ini tempatnya.

        return sub_trebel_data


    def tampilkan_data_sub_trebel(entry_sub_trebel, sub_trebel_data):


        entry_sub_trebel.delete(0, tk.END) # Menghapus data sebelumnya di entry

        entry_sub_trebel.insert(0, str(trebel_data)) # Memasukkan data Trebel baru 


        data_sub_trebel = ambil_data_sub_trebel_berdasarkan_sub_bass(sub_trebel_data)

        print(f"Data Sub Trebel: {data_sub_trebel}")


#Data Trebel dari tabel Sub_Gn_Cysn_Atas

    sub_trebel_data = {get_data_sub_gn_cyan_atas_from_db, "Trebel_1", "Trebel_2", "Trebel_3" "Trebel_4", "Trebel_5"

}    


# 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


# Fungsi untuk menyesuaikan nilai sub bass berdasarkan progres

def adjust_trebel_value(trebel_value, progres):

    if trebel_value.isdigit():

        # Menyesuaikan nilai dengan mengurangi setiap digit dengan progres

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

    else:

        adjusted_value = trebel_value

    return adjusted_value

               

# 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 dan entry

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_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)


label_trebel_gn_cyan_atas = tk.Label(frame_top, text="Trebel Gn_Cyan_Atas:")

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

entry_ttebel = tk.Entry(frame_top)

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


label_trebel_sub_gn_cyan_atas = tk.Label(frame_top, text="Sub Trebel Gn_Cyan_Atas:")

label_trebel_sub_gn_cyan_atas.grid(row=11, column=0, padx=0, pady=7)

entry_sub_trebel = tk.Entry(frame_top)

ent

ry_sub_trebel.grid(row=11, 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()


 Bersambung ke...

CRUD DATA PADA TABEL Gn_Cyan_Atas, dan Sub_Gn_Cyan_Atas PADA DATA KOLOM Bass DAN KOLOM Trebel (Part-4)


 

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...