Chat global

Chat
Loading the chat ...
conexão do pc com s...
 
Notifications
Clear all

conexão do pc com sql serve maquina virtual

3 Posts
2 Usuários
0 Reactions
52 Visualizações
(@rafick)
Posts: 14
Mentor Respeitado
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
PoTrAs18
(@potras18)
Posts: 44
Admin
 

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
(@rafick)
Posts: 14
Mentor Respeitado
Topic starter
 

 
Postado : 07/10/2025 11:40 am
Compartilhar:

Anúncio