سعيد ابوزيد نشر 5 يوليو 2023 أرسل تقرير نشر 5 يوليو 2023 (معدل) def search(self): con = pymysql.connect(host='localhost',user='root',passwd='',database='abozaid') cur = con.cursor() cur.execute("SELECT * FROM employee WHERE " + str(self.se_by.get())+" like'% "+str(self.se_var.get())+"%'") rows = cur.fetchall() if len(rows) !=0: self.student_table.delete(*self.student_table.get_children()) for row in rows: self.student_table.insert("",END,values=row) con.commit() con.close() تم التعديل في 5 يوليو 2023 بواسطة Mustafa Suleiman تعديل عنوان السؤال 1 اقتباس
0 Mustafa Suleiman نشر 5 يوليو 2023 أرسل تقرير نشر 5 يوليو 2023 المشكلة هي استخدام دالة str() للتحويل إلى سلسلة نصية في الجزء التالي: str(self.se_by.get())+" like'% "+str(self.se_var.get())+"%'" ويفترض أن self.se_by.get() و self.se_var.get() تعيدان قيمة عددية أو سلسلة نصية، وإذا كانت تلك القيم تعود بالفعل كسلاسل نصية، فلن تحتاج إلى استخدام str() مرة أخرى. لذا، عليك بتعديل السطر التالي: cur.execute("SELECT * FROM employee WHERE " + str(self.se_by.get()) + " like '% " + str(self.se_var.get()) + "%'") إلى: cur.execute("SELECT * FROM employee WHERE " + self.se_by.get() + " like '%" + self.se_var.get() + "%'") وبالتالي لن يتم تحويل القيم إلى سلاسل نصية مرتين، ويتم تكوين استعلام SQL بشكل صحيح. 1 اقتباس
0 سعيد ابوزيد نشر 5 يوليو 2023 الكاتب أرسل تقرير نشر 5 يوليو 2023 انا اقوم بالبحث من خلال كومبو بوكس لاختار نوع البحث ثم اقوم بكتابة المراد البحث عنه في text واقوم بالضغط على زرار البحث فقمت بعمل ما نبهتني اليه حضرتك ولكن لم تحل المشكلة ويعطي هذه الرسالة pymysql.err.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'like'% مندوب%'' at line 1") اقتباس
0 Mustafa Suleiman نشر 5 يوليو 2023 أرسل تقرير نشر 5 يوليو 2023 تلك مشكلة أخرى في صيغة استعلام SQL الذي يتم تكوينه، وتكمن في طريقة تكوين الجملة WHERE في الاستعلام. جرب تعديل السطر التالي: cur.execute("SELECT * FROM employee WHERE " + self.se_by.get() + " like '%" + self.se_var.get() + "%'") إلى: cur.execute("SELECT * FROM employee WHERE {} LIKE '%{}%'".format(self.se_by.get(), self.se_var.get())) وذلك لاستخدام التنسيق النصي {} لتضمين قيم المتغيرات في الاستعلام مما يساعد في تجنب أخطاء صيغة SQL ويجعل التعبير أكثر وضوحًا، وتأكد أيضًا من أن أسماء الأعمدة والجداول مكتوبة بشكل صحيح وتطابق قاعدة البيانات لديك. اقتباس
0 Kais Hasan نشر 6 يوليو 2023 أرسل تقرير نشر 6 يوليو 2023 بتاريخ 6 ساعة قال سعيد ابوزيد: انا اقوم بالبحث من خلال كومبو بوكس لاختار نوع البحث ثم اقوم بكتابة المراد البحث عنه في text واقوم بالضغط على زرار البحث فقمت بعمل ما نبهتني اليه حضرتك ولكن لم تحل المشكلة ويعطي هذه الرسالة pymysql.err.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'like'% مندوب%'' at line 1") للتأكد دائماً من صحة أي عبارة SQL تكتبها من الجيد طباعتها. أي قم بتعريف متحول يحمل العبارة و قم بطباعته ثم تنفيذه. مثلاً كما يلي: query = "SELECT * FROM employee WHERE " + self.se_by.get() + " like '%" + self.se_var.get() + "%'" print(query) cur.execute(query) يمكنك مشاركة الخرج معنا في حال لم تستطع حل المشكلة بعد رؤية العبارة. أيضاً يمكنك تسهيل الأمور عن طريق كتابة العبارة كما يلي: query = f"SELECT * FROM employee WHERE {self.se_by.get()} like '%{self.se_var.get()}%'" print(query) cur.execute(query) هذه تدعى f-string و تستعمل لوضع متغيرات داخل ال string، هذه هي الطريقة الحديثة الأفضل للقيام بذلك. اقتباس
0 بلال زيادة نشر 6 يوليو 2023 أرسل تقرير نشر 6 يوليو 2023 الخطأ الذي تم ذكره ينبع من استخدام دالة str() بشكل غير صحيح في الكود Python. يُستخدم str() عادة لتحويل قيمة إلى سلسلة نصية. لكن في السياق الحالي، الخطأ قد يكون نتيجة لاستخدام str() بشكل غير صحيح في التعبير التالي: str(self.se_by.get())+" like'% "+str(self.se_var.get())+"%'" لحل هذه المشكلة، يُمكنك تحديد نوع القيمة المُراد تحويلها إلى سلسلة نصية عن طريق استدعاء الدالة str() بشكل منفصل على كل قيمة. هنا توضيح لكيفية تعديل الكود: str(self.se_by.get()) + " like '%" + str(self.se_var.get()) + "%'" بتطبيق هذا التغيير، ستتمكن من تشغيل الكود بدون الحصول على خطأ الاستخدام غير الصحيح لدالة str(). اقتباس
0 سعيد ابوزيد نشر 6 يوليو 2023 الكاتب أرسل تقرير نشر 6 يوليو 2023 بتاريخ 11 ساعة قال بلال زيادة: الخطأ الذي تم ذكره ينبع من استخدام دالة str() بشكل غير صحيح في الكود Python. يُستخدم str() عادة لتحويل قيمة إلى سلسلة نصية. لكن في السياق الحالي، الخطأ قد يكون نتيجة لاستخدام str() بشكل غير صحيح في التعبير التالي: str(self.se_by.get())+" like'% "+str(self.se_var.get())+"%'" لحل هذه المشكلة، يُمكنك تحديد نوع القيمة المُراد تحويلها إلى سلسلة نصية عن طريق استدعاء الدالة str() بشكل منفصل على كل قيمة. هنا توضيح لكيفية تعديل الكود: str(self.se_by.get()) + " like '%" + str(self.se_var.get()) + "%'" بتطبيق هذا التغيير، ستتمكن من تشغيل الكود بدون الحصول على خطأ الاستخدام غير الصحيح لدالة str(). لم الاحظ اي اختلاف بين الكودين بتاريخ 19 ساعة قال Mustafa Suleiman: تلك مشكلة أخرى في صيغة استعلام SQL الذي يتم تكوينه، وتكمن في طريقة تكوين الجملة WHERE في الاستعلام. جرب تعديل السطر التالي: cur.execute("SELECT * FROM employee WHERE " + self.se_by.get() + " like '%" + self.se_var.get() + "%'") إلى: cur.execute("SELECT * FROM employee WHERE {} LIKE '%{}%'".format(self.se_by.get(), self.se_var.get())) وذلك لاستخدام التنسيق النصي {} لتضمين قيم المتغيرات في الاستعلام مما يساعد في تجنب أخطاء صيغة SQL ويجعل التعبير أكثر وضوحًا، وتأكد أيضًا من أن أسماء الأعمدة والجداول مكتوبة بشكل صحيح وتطابق قاعدة البيانات لديك. تم كتابة الكود ويظهر نفس الخطأ 1 اقتباس
0 Kais Hasan نشر 6 يوليو 2023 أرسل تقرير نشر 6 يوليو 2023 بتاريخ 54 دقائق مضت قال سعيد ابوزيد: لم الاحظ اي اختلاف بين الكودين تم كتابة الكود ويظهر نفس الخطأ من فضلك قم بطباعة تعليمة ال SQL كما ذكرت حتى يمكننا تحديد الخطأ. اقتباس
0 سعيد ابوزيد نشر 6 يوليو 2023 الكاتب أرسل تقرير نشر 6 يوليو 2023 بتاريخ 11 ساعة قال Kais Hasan: من فضلك قم بطباعة تعليمة ال SQL كما ذكرت حتى يمكننا تحديد الخطأ. كيف هذا ؟ 1 اقتباس
0 Kais Hasan نشر 6 يوليو 2023 أرسل تقرير نشر 6 يوليو 2023 بتاريخ 1 دقيقة مضت قال سعيد ابوزيد: كيف هذا ؟ لقد قمت بذكر الكود في تعليقي. اقتباس
0 سعيد ابوزيد نشر 6 يوليو 2023 الكاتب أرسل تقرير نشر 6 يوليو 2023 بتاريخ 3 ساعة قال سعيد ابوزيد: كيف هذا ؟ SELECT * FROM employee WHERE like '%%' Exception in Tkinter callback Traceback (most recent call last): File "C:\Users\hp\AppData\Local\Programs\Python\Python311\Lib\tkinter\__init__.py", line 1948, in __call__ return self.func(*args) 1 اقتباس
0 Kais Hasan نشر 6 يوليو 2023 أرسل تقرير نشر 6 يوليو 2023 بتاريخ 2 ساعة قال سعيد ابوزيد: SELECT * FROM employee WHERE like '%%' Exception in Tkinter callback Traceback (most recent call last): File "C:\Users\hp\AppData\Local\Programs\Python\Python311\Lib\tkinter\__init__.py", line 1948, in __call__ return self.func(*args) هذا غريب، لا يظهر نفس الخطأ، حتى أن محتوى الشرط فارغ، من فضلك قم مشاركة الكود بعد التعديل حتى أتأكد أنك قمت بتعديله بالشكل الصحيح. اقتباس
0 علي عبد محسن نشر 7 يوليو 2023 أرسل تقرير نشر 7 يوليو 2023 بتاريخ On 6/7/2023 at 15:23 قال سعيد ابوزيد: SELECT * FROM employee WHERE like '%%' Exception in Tkinter callback Traceback (most recent call last): File "C:\Users\hp\AppData\Local\Programs\Python\Python311\Lib\tkinter\__init__.py", line 1948, in __call__ return self.func(*args) من الواضح في رسالة الخطأ أن القيم الراجعة من كل من ()self.se_by.get و ()self.se_var.get فارغة وبالطبع هذا يعتمد على أجزاء أخرى من الكود لم تقم بمشاركتها. يمكنك طباعة ما تحمله الدالتين أنفتي الذكر بالدالة print الى ال console من أجل عمل تصحيح الأخطاء (debugging) . حتى تفصل المشاكل عن بعضها قم أولاً بوضع قيم نصية ثابتة string في محل إستخدام الدوال أعلاه في جملة sql من أجل التحقق من حل مشكلة في هذا الموضع تحديداً, ثم أنتقل بعد ذلك للتحقق من أن كل من ()self.se_by.get و ()self.se_var.get يعيدان القيمة المطلوبة قبل الشروع بتنفيذ جملة sql. اقتباس
0 سعيد ابوزيد نشر 8 يوليو 2023 الكاتب أرسل تقرير نشر 8 يوليو 2023 بتاريخ On 7/7/2023 at 09:55 قال علي عبد محسن: من الواضح في رسالة الخطأ أن القيم الراجعة من كل من ()self.se_by.get و ()self.se_var.get فارغة وبالطبع هذا يعتمد على أجزاء أخرى من الكود لم تقم بمشاركتها. يمكنك طباعة ما تحمله الدالتين أنفتي الذكر بالدالة print الى ال console من أجل عمل تصحيح الأخطاء (debugging) . حتى تفصل المشاكل عن بعضها قم أولاً بوضع قيم نصية ثابتة string في محل إستخدام الدوال أعلاه في جملة sql من أجل التحقق من حل مشكلة في هذا الموضع تحديداً, ثم أنتقل بعد ذلك للتحقق من أن كل من ()self.se_by.get و ()self.se_var.get يعيدان القيمة المطلوبة قبل الشروع بتنفيذ جملة sql. بتاريخ On 6/7/2023 at 08:01 قال Kais Hasan: هذا غريب، لا يظهر نفس الخطأ، حتى أن محتوى الشرط فارغ، من فضلك قم مشاركة الكود بعد التعديل حتى أتأكد أنك قمت بتعديله بالشكل الصحيح. هذا هو الكود كامل: from tkinter import * from tkinter import ttk ,Tk import pymysql import tkinter as tk class Student: #========انشاء نافذة البرنامج======== def __init__(self , root): self.root = root self.root.geometry('1350x690+1+1') self.root.resizable(False,False) self.root.title('برنامج دليفري شوب') self.root.configure(background="silver") title = Label(self.root,text=' إدارة شئون العاملين ',bg='silver',font=('monospace',18,'bold','underline'),background='blue',fg='white') title.pack(fill=X) #===============المتغيرات=============== self.id_var = StringVar() self.name_var = StringVar() self.nid_var = StringVar() self.phone_var = StringVar() self.address_var = StringVar() self.jobdate_var = StringVar() self.job_var = StringVar() self.hub_var = StringVar() self.salary_var = StringVar() self.delete_var = StringVar() self.seVar = StringVar() self.seBy=StringVar() search_type_var = StringVar #===========ادوات التحكم بالبرنامج======== Manage_Frame = Frame(self.root,bg='white') Manage_Frame.place(x=1135,y=40,width=210,height=550) lbl_ID = Label(Manage_Frame,text='الكود',bg='white',font=('tajawal',15,'bold')) lbl_ID.pack() ID_Entry = Entry(Manage_Frame,textvariable=self.id_var,bd=2,font=('tajawal',13),fg='blue',justify='center') ID_Entry.pack() lbl_Name = Label(Manage_Frame,text='الاسم',bg='white',font=('tajawal',15,'bold')) lbl_Name.pack() Name_Entry = Entry(Manage_Frame,textvariable=self.name_var,bd=2,font=('tajawal',13),fg='blue',justify='center') Name_Entry.pack() lbl_NID = Label(Manage_Frame,text='الرقم القومي',bg='white',font=('tajawal',15,'bold')) lbl_NID.pack() NID_Entry = Entry(Manage_Frame,textvariable=self.nid_var,bd=2,font=('tajawal',13),fg='blue',justify='center') NID_Entry.pack() lbl_Phone = Label(Manage_Frame,text='رقم التليفون',bg='white',font=('tajawal',15,'bold')) lbl_Phone.pack() Phone_Entry = Entry(Manage_Frame,textvariable=self.phone_var,bd=2,font=('tajawal',13),fg='blue',justify='center') Phone_Entry.pack() lbl_Add = Label(Manage_Frame,text='العنوان',bg='white',font=('tajawal',15,'bold')) lbl_Add.pack() Add_Entry = Entry(Manage_Frame,textvariable=self.address_var,bd=2,font=('tajawal',13),fg='blue',justify='center') Add_Entry.pack() lbl_Date = Label(Manage_Frame,text='تاريخ التعيين',bg='white',font=('tajawal',15,'bold')) lbl_Date.pack() Date_Entry = Entry(Manage_Frame,textvariable=self.jobdate_var,bd=2,font=('tajawal',13),fg='blue',justify='center') Date_Entry.pack() lbl_Job = Label(Manage_Frame,text='الوظيفة',bg='white',font=('tajawal',15,'bold')) lbl_Job.pack() Combo_Job = ttk.Combobox (Manage_Frame,textvariable=self.job_var) Combo_Job['value']=('مدير','مشرف','محاسب','مندوب','اوفيس بوي') Combo_Job.pack() lbl_Hub = Label(Manage_Frame,text='الفرع',bg='white',font=('tajawal',15,'bold')) lbl_Hub.pack() Hub_Entry = Entry(Manage_Frame,textvariable=self.hub_var,bd=2,font=('tajawal',13),fg='blue',justify='center') Hub_Entry.pack() lbl_Salary = Label(Manage_Frame,text='المرتب',bg='white',font=('tajawal',15,'bold')) lbl_Salary.pack() Salary_Entry = Entry(Manage_Frame,textvariable=self.salary_var,bd=2,font=('tajawal',13),fg='blue',justify='center') Salary_Entry.pack() lbl_Delete = Label(Manage_Frame,fg='red',bg='white',text='حذف بالأسم',font=('tajawal',15,'bold')) lbl_Delete.pack() Delete_Entry = Entry(Manage_Frame,textvariable=self.delete_var,bd=2,font=('tajawal',13),fg='blue',justify='center') Delete_Entry.pack() #=========buttons========= btn_Frame = Frame(self.root,bg='white') btn_Frame.place(x=1137,y=595,width=210,height=200) add_btn = Button(btn_Frame,text='اضافة',bg='#0B41F8',fg='white',font=('tajawal',11,'bold'),command=self.add_student) add_btn.place(x=105,y=3,width=100,height=25) del_btn = Button(btn_Frame,text='حذف',bg='#0B41F8',fg='white',font=('tajawal',11,'bold'),command=self.delete) del_btn.place(x=5,y=30,width=90,height=25) update_btn = Button(btn_Frame,text='تعديل',bg='#0B41F8',fg='white',font=('tajawal',11,'bold'),command=self.update) update_btn.place(x=5,y=3,width=90,height=25) clear_btn = Button(btn_Frame,text='افراغ الحقول',bg='#0B41F8',fg='white',font=('tajawal',11,'bold'),command=self.clear) clear_btn.place(x=105,y=30,width=100,height=25) exit_btn = Button(btn_Frame,text='خروج',bg='#0B41F8',fg='white',font=('tajawal',11,'bold'),command=quit) exit_btn.place(x=10,y=60,width=190,height=30) #=================search manage ========================== search_frame = Frame(self.root,bg='white') search_frame.place(x=1,y=40,width=1133,height=50) lbl_search = Label(search_frame,text='بحث',bg='white',font=('arial',14,'bold')) lbl_search.place(x=1090,y=12) #search_type_var = tk.StringVar(value="الكود") #search_type_options = ['التليفون', 'الاسم', 'الوظيفة','الفرع'] #search_type_dropdown = tk.OptionMenu(search_frame, search_type_var, *search_type_options) #search_type_dropdown.place(x=1005,y=13) combo_search = ttk.Combobox(search_frame,justify='center') combo_search['value']=('الاسم','التليفون','الوظيفة','الفرع') combo_search.place(x=940,y=12) search_Entry = Entry(search_frame,textvariable=self.seVar,justify='center',bd=2,font=('tajawal',13),fg='blue') search_Entry.place(x=750,y=12) se_btn = Button(search_frame,text='بحث',bg='#0B41F8',fg='white',font=('tajawal',11,'bold'),command=self.search) se_btn.place(x=670,y=12,width=70,height=25) pr_btn = Button(search_frame,text='طباعة',bg='#0B41F8',fg='white',font=('tajawal',11,'bold')) pr_btn.place(x=300,y=12,width=90,height=30) intag_btn = Button(search_frame,text='الانتاجيات',bg='#0B41F8',fg='white',font=('tajawal',11,'bold')) intag_btn.place(x=200,y=12,width=90,height=30) acount_btn = Button(search_frame,text='الحسابات',bg='#0B41F8',fg='white',font=('tajawal',11,'bold')) acount_btn.place(x=100,y=12,width=90,height=30) exit1_btn = Button(search_frame,text='خروج',bg='#0B41F8',fg='white',font=('tajawal',11,'bold'),command=quit) exit1_btn.place(x=5,y=12,width=90,height=30) #==============dietals======= Dietals_Frame = Frame(self.root) Dietals_Frame.place(x=3,y=92,width=1128,height=593) #=========scroll======== scroll_x = Scrollbar(Dietals_Frame,orient=HORIZONTAL) scroll_y = Scrollbar(Dietals_Frame,orient=VERTICAL) #==========treeview========== self.student_table = ttk.Treeview(Dietals_Frame, columns=('salary','hub','job','jobdate','address','phone','NID','name','id'), xscrollcommand=scroll_x.set, yscrollcommand=scroll_y.set) self.student_table.place(x=18,y=1,width=1120,height=570) scroll_x.pack(side=BOTTOM,fill=X) scroll_y.pack(side=LEFT,fill=Y) self.student_table['show']='headings' self.student_table.heading('salary',text='المرتب') self.student_table.heading('hub',text='الفرع') self.student_table.heading('job',text='الوظيفة') self.student_table.heading('jobdate',text='تاريخ التعيين') self.student_table.heading('address',text='العنوان') self.student_table.heading('phone',text='التليفون') self.student_table.heading('NID',text='الرقم القومي') self.student_table.heading('name',text='الاسم') self.student_table.heading('id',text='الكود') self.student_table.column('salary',width=20) self.student_table.column('hub',width=50) self.student_table.column('job',width=50) self.student_table.column('jobdate',width=60) self.student_table.column('address',width=320) self.student_table.column('phone',width=60) self.student_table.column('NID',width=90) self.student_table.column('name',width=170) self.student_table.column('id',width=30) self.student_table.bind('<ButtonRelease-1>',self.get_cursor) #============con +add============ self.fetch_all() def add_student(self): con = pymysql.connect( host='localhost', user='root', password='', database='abozaid' ) cur = con.cursor() cur.execute("insert into employee value(%s,%s,%s,%s,%s,%s,%s,%s,%s)",( self.salary_var.get(), self.hub_var.get(), self.job_var.get(), self.jobdate_var.get(), self.address_var.get(), self.phone_var.get(), self.nid_var.get(), self.name_var.get(), self.id_var.get() )) con.commit() self.fetch_all() self.clear() con.close() def fetch_all(self): con = pymysql.connect(host='localhost',user='root',passwd='',database='abozaid') cur = con.cursor() cur.execute('select * from employee') rows = cur.fetchall() if len(rows) !=0: self.student_table.delete(*self.student_table.get_children()) for row in rows: self.student_table.insert('',END,values=row) con.commit() con.close() def delete(self): con = pymysql.connect(host='localhost',user='root',passwd='',database='abozaid') cur = con.cursor() cur.execute('delete from employee where name=%s',self.delete_var.get()) con.commit() self.fetch_all() con.close() def clear(self): self.id_var.set('') self.name_var.set('') self.nid_var.set('') self.phone_var.set('') self.address_var.set('') self.jobdate_var.set('') self.job_var.set('') self.hub_var.set('') self.salary_var.set('') def get_cursor(self,ev): cursor_row = self.student_table.focus() contens = self.student_table.item(cursor_row) row = contens['values'] self.id_var.set(row[8]) self.name_var.set(row[7]) self.nid_var.set(row[6]) self.phone_var.set(row[5]) self.address_var.set(row[4]) self.jobdate_var.set(row[3]) self.job_var.set(row[2]) self.hub_var.set(row[1]) self.salary_var.set(row[0]) def update(self): con = pymysql.connect( host='localhost', user='root', password='', database='abozaid') cur = con.cursor() cur.execute("update employee set salary=%s,hub=%s,job=%s,jobdate=%s,address=%s,phone=%s,nid=%s,name=%s where id=%s",( self.salary_var.get(), self.hub_var.get(), self.job_var.get(), self.jobdate_var.get(), self.address_var.get(), self.phone_var.get(), self.nid_var.get(), self.name_var.get(), self.id_var.get() )) con.commit() self.fetch_all() self.clear() con.close() def search(self): con = pymysql.connect(host='localhost',user='root',passwd='',database='abozaid') cur = con.cursor() cur.execute("SELECT * FROM employee WHERE " + (self.seBy.get())+ "LIKE'%" + str(self.seVar.get()) + "%'") rows = cur.fetchall() if len(rows) !=0: self.student_table.delete(*self.student_table.get_children()) for row in rows: self.student_table.insert("",END,values=row) con.commit() con.close() root = Tk() ob = Student(root) root.mainloop() اقتباس
السؤال
سعيد ابوزيد
def search(self):
con = pymysql.connect(host='localhost',user='root',passwd='',database='abozaid')
cur = con.cursor()
cur.execute("SELECT * FROM employee WHERE " +
str(self.se_by.get())+" like'% "+str(self.se_var.get())+"%'")
rows = cur.fetchall()
if len(rows) !=0:
self.student_table.delete(*self.student_table.get_children())
for row in rows:
self.student_table.insert("",END,values=row)
con.commit()
con.close()
تم التعديل في بواسطة Mustafa Suleimanتعديل عنوان السؤال
13 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.