Chat global
Chat
Loading the chat ...
conexão do pc com sql serve maquina virtual
Tutoriais
3
Posts
2
Usuários
0
Reactions
52
Visualizações
Topic starter
para quem sabe mexer com phyton quiser fazer conexão remota direto do seu pc pode usar
precisa abrir porta no sql server 1433 ou a que quiser
para mexer no sql serve este e so um exemplo edita recompensa da quest
conexão do meu pc com sql serve maquina virtual
https://ibb.co/gL1jFVCH
https://ibb.co/TM3DJQ3p
video: https://uploadnow.io/s/b96609cb-2d92-49af-bdc6-91e18d81e48a
import tkinter as tk from tkinter import ttk, messagebox import pyodbc import socket # ======================== # CONFIGURAÇÃO # ======================== DB_HOSTNAME = "server" # Nome do servidor SQL (instância nomeada) DB_INSTANCE = "SQLEXPRESS" # Instância DB_DATABASE = "Quest" # Nome do banco DB_USER = "sa" DB_PASSWORD = "m@2409" DB_IP = "ip da maquina" # IP da VM DB_PORT = 1433 # Porta TCP fixa da instância # ======================== class QuestEditor(tk.Tk): def __init__(self): super().__init__() self.title("Editor de Recompensas de Quests") self.geometry("950x650") self.conn = None self.cursor = None self.data = [] # Tabela cols = ("questID", "Item1", "Qty1", "Item2", "Qty2", "Item3", "Qty3", "Gold", "EXP") self.tree = ttk.Treeview(self, columns=cols, show="headings") for col in cols: self.tree.heading(col, text=col) self.tree.column(col, width=100, anchor="center") self.tree.pack(fill="x", pady=10) self.tree.bind("<<TreeviewSelect>>", self.on_select) # Campos de edição labels = ["Item1", "Qty1", "Item2", "Qty2", "Item3", "Qty3", "Gold", "EXP"] self.entries = {} for i, label in enumerate(labels): tk.Label(self, text=label + ":").place(x=10, y=310 + i * 30) entry = tk.Entry(self) entry.place(x=70, y=310 + i * 30, width=150) self.entries[label] = entry # Botões tk.Button(self, text="💾 Salvar Alterações", bg="#4CAF50", fg="white", command=self.save).place(x=250, y=310, width=150, height=30) tk.Button(self, text="➕ Adicionar Quest", bg="#2196F3", fg="white", command=self.add_quest).place(x=420, y=310, width=150, height=30) tk.Button(self, text="🗑️ Excluir Quest", bg="#f44336", fg="white", command=self.delete_quest).place(x=590, y=310, width=150, height=30) # Conecta self.load_connection() if self.conn: self.load_data() # ======================== # CONEXÃO SQL SERVER # ======================== def load_connection(self): last_error = None # Tentativa 1: usando hostname + instância try: server_instance = f"{DB_HOSTNAME}\\{DB_INSTANCE}" conn_str = f"DRIVER={{SQL Server}};SERVER={server_instance};DATABASE={DB_DATABASE};UID={DB_USER};PWD={DB_PASSWORD}" self.conn = pyodbc.connect(conn_str, timeout=5) self.cursor = self.conn.cursor() print(f"✅ Conectado usando hostname: {server_instance}") messagebox.showinfo("Conexão", "Conexão SQL Server bem-sucedida (hostname)!") return except Exception as e: last_error = e print(f"Falha com hostname: {e}") # Tentativa 2: fallback usando IP + porta fixa try: server_ip = f"{DB_IP},{DB_PORT}" conn_str = f"DRIVER={{SQL Server}};SERVER={server_ip};DATABASE={DB_DATABASE};UID={DB_USER};PWD={DB_PASSWORD}" self.conn = pyodbc.connect(conn_str, timeout=5) self.cursor = self.conn.cursor() print(f"✅ Conectado usando IP: {server_ip}") messagebox.showinfo("Conexão", "Conexão SQL Server bem-sucedida (IP)!") return except Exception as e: last_error = e print(f"Falha com IP: {e}") messagebox.showerror("Erro", f"Não foi possível conectar ao SQL Server.\nÚltimo erro: {last_error}") self.conn = None self.cursor = None # ======================== # CARREGAR DADOS # ======================== def load_data(self): if not self.cursor: return for item in self.tree.get_children(): self.tree.delete(item) try: self.cursor.execute("SELECT * FROM dbo.QuestRewards ORDER BY questID") self.data = self.cursor.fetchall() for row in self.data: self.tree.insert( "", "end", values=( row.questID, row.rewardItemCode1, row.rewardItemQuantity1, row.rewardItemCode2, row.rewardItemQuantity2, row.rewardItemCode3, row.rewardItemQuantity3, row.rewardGold, row.rewardEXP, ), ) except Exception as e: messagebox.showerror("Erro", f"Erro ao carregar dados: {e}") # ======================== # AO SELECIONAR LINHA # ======================== def on_select(self, event): selected = self.tree.selection() if not selected or not self.cursor: return values = self.tree.item(selected[0], "values") if not values: return for i, key in enumerate(["Item1","Qty1","Item2","Qty2","Item3","Qty3","Gold","EXP"]): self.entries[key].delete(0, tk.END) self.entries[key].insert(0, values[i+1]) # ======================== # SALVAR ALTERAÇÕES # ======================== def save(self): selected = self.tree.selection() if not selected or not self.cursor: messagebox.showwarning("Aviso", "Selecione uma quest para editar.") return values = self.tree.item(selected[0], "values") quest_id = values[0] sql = """ UPDATE dbo.QuestRewards SET rewardItemCode1=?, rewardItemQuantity1=?, rewardItemCode2=?, rewardItemQuantity2=?, rewardItemCode3=?, rewardItemQuantity3=?, rewardGold=?, rewardEXP=? WHERE questID=? """ params = tuple(self.entries[key].get() for key in ["Item1","Qty1","Item2","Qty2","Item3","Qty3","Gold","EXP"]) params += (quest_id,) try: self.cursor.execute(sql, params) self.conn.commit() self.load_data() messagebox.showinfo("Sucesso", "✅ Quest atualizada com sucesso!") except Exception as e: messagebox.showerror("Erro", f"Erro ao atualizar: {e}") # ======================== # ADICIONAR QUEST # ======================== def add_quest(self): try: self.cursor.execute("SELECT ISNULL(MAX(questID),0)+1 FROM dbo.QuestRewards") new_id = self.cursor.fetchone()[0] sql = """ INSERT INTO dbo.QuestRewards ( questID, rewardItemCode1, rewardItemCode2, rewardItemCode3, rewardItemQuantity1, rewardItemQuantity2, rewardItemQuantity3, rewardGold, rewardEXP ) VALUES (?, '', '', '', 0, 0, 0, 0, 0) """ self.cursor.execute(sql, (new_id,)) self.conn.commit() self.load_data() messagebox.showinfo("Sucesso", f"🆕 Quest {new_id} criada com sucesso!") except Exception as e: messagebox.showerror("Erro", f"Erro ao adicionar quest: {e}") # ======================== # EXCLUIR QUEST # ======================== def delete_quest(self): selected = self.tree.selection() if not selected: messagebox.showwarning("Aviso", "Selecione uma quest para excluir.") return values = self.tree.item(selected[0], "values") quest_id = values[0] if not messagebox.askyesno("Confirmar", f"Excluir quest {quest_id}?"): return try: self.cursor.execute("DELETE FROM dbo.QuestRewards WHERE questID=?", (quest_id,)) self.conn.commit() self.load_data() messagebox.showinfo("Sucesso", f"🗑️ Quest {quest_id} excluída.") except Exception as e: messagebox.showerror("Erro", f"Erro ao excluir quest: {e}") if __name__ == "__main__": app = QuestEditor() app.mainloop()
Este tópico foi modificado 2 semanas atrás by Rafick
Este tópico foi modificado 2 semanas atrás by PoTrAs18
Postado : 07/10/2025 3:57 am

Bom dia,
Editei sua postagem para inserir o código no formato correto e facilitar a visualização.
Postado : 07/10/2025 9:26 am
Forum Information
- 20 Fóruns
- 222 Tópicos
- 1,246 Posts
- 8 Online
- 215 Membros
Novos novos membros: M.R.X
Post Recente: [SOURCE] WORLD 2025 V3
Ícones do Fórum:
Fórum não contém posts não lidos
Fórum contém posts não lidos
Ícones dos Tópicos:
Não Respondido
Respondido
Ativo
Em Alta
Fixar
Reprovado
Resolvido
Privado
Fechado