Ir para conteúdo
Fórum Script Brasil

kuroi

Membros
  • Total de itens

    7.184
  • Registro em

  • Última visita

Tudo que kuroi postou

  1. kuroi

    SELECT FROM DIARY

    tenta asssim: StrSql= "Select * from diary where dte = #" & Year(dtToday) & "-" & Month(dtToday) & "-" & Day(dtToday) & "# ORDER BY dte"
  2. Select Max(Codigo) As Ultimo From Tabela
  3. o q você quer dizer com "dando conflito com a textbox"?? acho q se o campo é numero, então você devia fazer o select sem aspa: Set tabela = banco.OpenRecordset("select * from tbcontato where cod_contato = " & txtcodpesq.Text)
  4. você não tem um objeto DataBase declarado?? do tipo: Private SeuObjetoDatabase As DAO.Database Set SeuObjetoDatabase = DBEngine.Workspaces(0).OpenDatabase("C:\Caminho\SeuBanco.mdb")[/code] você teria q ter isso a não ser q estiver usando controles vinculados.
  5. essa linha tb tinha q ser assim: parcela = CDbl({tab_estoque.parcela});
  6. kuroi

    Asp.NET no VS 2005

    to com uma duvida aqui em relacao ao Visual Studio 2005. lembro q quando eu usava o 2003 e mandava compilar o meu projeto Asp.NET, ele compilava em uma dll na mesma pasta da minha aplicação. ai na hora de hospedar o meu site, eu tinha q enviar a dll junto pro servidor. até ai tudo bem. mas aqui em casa eu tenho o VS 2005. além de o 2005 ter a ridicula idéia de sempre gravar a solution numa pasta em meus documentos separada do projeto (pelo menos eu não gosto disso), quando eu compilo ele simplesmente não faz nenhuma dll, mas mesmo assim o site funciona certinho. eu pelo menos não achei essa dll em nenhum lugar no meu pc. se ela existe, como faco pra encontra-la?? se não existe, pra onde então ele compila o meu site?? na hora de hospedar então, como vou mandar o meu site compilado pro servidor?? não adianta só mandar os aspx, pois la só tem o codigo html, como ele vai saber os códigos q tem q executar??
  7. kuroi

    Foco Em Uma Tab

    mas qual é o nome da SSTab q ta no seu formulario?? substitua o SSTab1 pelo nome da sua tab. se for TabConsumidores, faca TabConsumidores.Tab = 1.
  8. kuroi

    Pesquisa Em Sql

    par e impar do q??
  9. kuroi

    Algumas Dúvidas

    Eu também queria saber isso. Se você achar algo, por favor, me dê um toque. :) opa graymalkin. levou dois anos mas agora descobri que tem jeito sim: http://scriptbrasil.com.br/forum/index.php?showtopic=110696 apesar de q (uns posts pra cima) eu já tinha te passado o link do projeto (q hj não funciona mais), não sei se você olhou la e conseguiu fazer alguma coisa, mas eu tinha baixado mas não tinha conseguido utilizar. ai esses dias achei o projeto aqui em casa e vi q era até facil de entender, apesar de ser muito dificil de utilizar. ai fiz um tutorial pra isso no link acima.
  10. Nesse tópico aqui http://scriptbrasil.com.br/forum/index.php?showtopic=82391 o nosso amigo fabyo postou uma solucao pra como utilizar a rodinha do mouse no editor de codigo do Visual Basic. Mas acredito que mta gente ainda ta loco atras de alguma forma de fazer os controles VScrollBar ou HScrollBar ou qualquer outro responder à rodinha. Agora você vai aprender então como fazer o seu programa em Visual Basic 6 responder ao scroll do mouse. Na verdade há alguns anos atrás encontrei na internet um código já pronto que ensinava a usar a rodinha. Mas na época não consegui fazer funcionar em otro projeto e desisti. Olhando agora eu não sei porque não consegui já q é tão facil de entender. Mas há alguns dias atrás achei na minha casa aqui o projeto e consegui adaptar pra outros programas. Pra quem quer ver, o projeto original é esse aqui: http://rapidshare.com/files/70659407/MouseWheel.zip.html Baseado nele, abaixo vou ensinar como fazer a sua VScrollBar responder ao scroll. ATENÇÃO: Só pra adiantar, esse procedimentos fazem um uso MUITO pesado de APIs. Você deve seguir EXATAMENTE como está abaixo. De preferência, SALVE o seu projeto antes de qualquer coisa e depois vá salvando a cada procedimento. A princípio não faça NENHUMA alteração em nenhum parte do código por mais que pareça que não vai interferir em nada. As APIs fazem uma comunicação com todo o ambiente Windows a ponto de apontar o endereço na memória da sua janela (apesar de eu estar falando bonito assim, tb não tenho ideia dos detalhes de como funciona) e qualquer besteira que você fizer pode causar o fechamento do Visual Basic sem aviso prévio e perda de informações não salvas. Por isso, SALVE SEMPRE. Observação: O tutorial abaixo ensina como usar o scroll em apenas UM dos formulários do seu projeto. Para a utilização do scroll em mais de um formulário, talvez mais pra frente eu poste aqui uma solução, tb porque no momento eu também estou com dificuldades para encontrar um método prático e que funcione certinho. Primeiro de tudo, adicione um Module no seu projeto (se você já tiver um Module, é bom usar um separado só para as funções do Scroll). Em seguida, declare as seguintes variáveis, funções e constantes: Option Explicit Public roda As Boolean Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" ( _ ByVal hwnd As Long, _ ByVal nIndex As Long) As Long Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" ( _ ByVal hwnd As Long, _ ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long Private Declare Function DefWindowProc Lib "user32" Alias "DefWindowProcA" ( _ ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ ByVal lParam As Long) As Long Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" ( _ ByVal lpPrevWndFunc As Long, _ ByVal hwnd As Long, _ ByVal Msg As Long, _ ByVal wParam As Long, _ ByVal lParam As Long) As Long Public Declare Function GetProp Lib "user32" Alias "GetPropA" ( _ ByVal hwnd As Long, _ ByVal lpString As String) As Long Public Declare Function SetProp Lib "user32" Alias "SetPropA" ( _ ByVal hwnd As Long, _ ByVal lpString As String, _ ByVal hData As Long) As Long Public Declare Function RemoveProp Lib "user32" Alias "RemovePropA" ( _ ByVal hwnd As Long, _ ByVal lpString As String) As Long Public Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" ( _ ByVal uAction As Long, _ ByVal uParam As Long, _ ByVal lpvParam As Any, _ ByVal fuWinIni As Long) As Long Public Declare Function GetSystemMetrics Lib "user32" ( _ ByVal nIndex As Long) As Long Public Const GWL_WNDPROC = -4 Private Const WM_MOUSEWHEEL = &H20A Private Const WHEEL_DELTA = 120 Public Const SM_MOUSEWHEELPRESENT = 75 Public Function HiWord(dw As Long) As Integer If dw And &H80000000 Then HiWord = (dw \ 65535) - 1 Else HiWord = dw \ 65535 End If End Function Public Function LoWord(dw As Long) As Integer If dw And &H8000& Then LoWord = &H8000 Or (dw And &H7FFF&) Else LoWord = dw And &HFFFF& End If End Function[/code] Agora, abra o formulário que possui a Scroll Bar e adicione os seguintes códigos nos eventos Load e UnLoad: [code]Private Sub Form_Load() SetProp Form1.hwnd, "PrevWndProc", SetWindowLong(Form1.hwnd, GWL_WNDPROC, AddressOf WndProc) If GetSystemMetrics(SM_MOUSEWHEELPRESENT) Then roda = True Else roda = False SetWindowLong Form1.hwnd, GWL_WNDPROC, GetProp(Form1.hwnd, "PrevWndProc") RemoveProp Form1.hwnd, "PrevWndProc" End If End Sub Private Sub Form_Unload(Cancel As Integer) If roda Then SetWindowLong Form1.hwnd, GWL_WNDPROC, GetProp(Form1.hwnd, "PrevWndProc") RemoveProp Form1.hwnd, "PrevWndProc" Set Form1 = Nothing End If End Sub A variável roda é um flag pra guardar se o mouse possui scroll ou não. Se não possuir ele já desativa a função que lê o mouse. Caso ele possua, ele só vai desativar no UnLoad do formulário. !!!IMPORTANTE!!!! Preste atenção ao NOME do seu formulário. No código acima, substitua Form1 pelo nome do seu formulário em TODAS as ocorrências. Atenção que não adianta usar o atalho e escrever Me em vez do nome do formulário. TEM QUE SER o nome. ATENÇÃO: Ao ativar a função que lê o mouse, o Windows vai marcar sua janela como referência. Por isso, NÃO CANCELE a execução no editor de códigos clicando no botão Stop, pois se fizer isso e a função que lê o mouse não for desativada o Windows ainda vai querer ler a sua janela o que pode causar erros enquanto você não reiniciar o computador. Para finalizar, no MODULE, adicione a função que lê o mouse: Public Function WndProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long If uMsg = WM_MOUSEWHEEL Then If (HiWord(wParam) / WHEEL_DELTA) < 0 Then 'RODANDO PARA BAIXO With Form1.VScroll1 If .Value < .Max Then .Value = .Value + 1 End With Else 'RODANDO PARA CIMA With Form1.VScroll1 If .Value > .Min Then .Value = .Value - 1 End With End If DefWindowProc hwnd, uMsg, wParam, lParam Else WndProc = CallWindowProc(GetProp(Form1.hwnd, "PrevWndProc"), hwnd, uMsg, wParam, lParam) End If End Function[/code] Essa é a função que, a cada instante, responde aos eventos do mouse. O código procura especificamente quando a roda for girada e, no caso, ele roda a VScrollBar. Você pode alterar a parte da ScrollBar como te for conveniente dependendo da resposta que você quer dar à girada da rodinha. ATENÇÃO - Novamente, altere Form1 para o nome do seu formulário em todas as ocorrências. - NÃO ALTERE O NOME DA FUNÇÃO WndProc Pronto. Gire a roda pra ver a ScrollBar se mexer. Note também, que o código acima vai mover a ScrollBar não importa a localização do mouse. Se você tiver outras ScrollBars e quiser mover uma específica de acordo com a localização, cabe a você fazer a programação correta. Para isso é relativamente simples, pelo evento MouseMove do formulario pegar a posicao do mouse e assim, utilizando variaveis globais, adaptar na funcao acima pra tomar determinada ação dependendo da posição. Também, abaixo está um link com um projeto de exemplo de como trabalhar com múltiplas ScrollBars. Como vocês viram, é preciso muito cuidado pra mexer com essas funções. Pra qualquer dúvidas que vocês tiverem, BAIXE AQUI o projeto com o código funcionando: http://rapidshare.com/files/70696444/RodaDoMouse.zip.html Nesse link você encontra dois projetos. Um deles é o exemplo prático desse tutorial, no caso de você não conseguir fazer, você vai ter o exemplo pronto pra poder olhar. O segundo projeto é um exemplo de como trabalhar com múltiplas ScrollBars. Últimas Considerações: Resumindo, trabalhar com o Scroll do Mouse no Visual Basic 6 é uma tristeza. O que eu recomendo é que você adicione as funções no Module, ponha o código no formulário pra ativar a função, teste e veja se funciona mas, enquanto estiver ainda desenvolvendo o projeto, deixe o código do formulário todo comentado pra não atrapalhar os seus testes referente ao resto do programa. Ative o código somente quando for liberar o programa pronto. O programa original (link lá em cima) ensina também a saber quando a rodinha é girada com o Ctrl ou Shift, ou algum botão pressionado, dêem uma olhada lá. Só pra constar, a função WndProc pode ler qualquer ação do mouse, mas no código acima está focado apenas no girar da rodinha. Mas, por exemplo, você pode programar uma ação pra quando ele clicar na rodinha (considerada como botão do meio do mouse), assim como você faz pra abrir o link em uma nova aba no FireFox. Você só precisaria declarar a constante: [code]Private Const WM_MBUTTONUP = &H208 E adicionar a programação correta na função WndProc: Public Function WndProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long If uMsg = WM_MOUSEWHEEL Then ... ElseIf uMsg = WM_MBUTTONUP Then MsgBox "Apertou botão do meio!" Else WndProc = CallWindowProc(GetProp(Form1.hwnd, "PrevWndProc"), hwnd, uMsg, wParam, lParam) End If End Function[/code] Aqui está o Enum de todas as ações possíveis do mouse: [codebox]Public Enum WindowMessages WM_ACTIVATE = &H6 WM_ACTIVATEAPP = &H1C WM_ASKCBFORMATNAME = &H30C WM_CANCELJOURNAL = &H4B WM_CANCELMODE = &H1F WM_CAPTURECHANGED = &H1F WM_CAPTURECHANGED_R = &H215 WM_CHANGECBCHAIN = &H30D WM_CHAR = &H102 WM_CHARTOITEM = &H2F WM_CHILDACTIVATE = &H22 WM_CHOOSEFONT_GETLOGFONT = &H401 WM_CHOOSEFONT_SETFLAGS = (&H400 + 102) WM_CHOOSEFONT_SETLOGFONT = (&H400 + 101) WM_CLEAR = &H303 WM_CLOSE = &H10 WM_COMMAND = &H111 WM_COMPACTING = &H41 WM_COMPAREITEM = &H39 WM_CONTEXTMENU = &H7B WM_CONVERTREQUESTEX = &H108 WM_COPY = &H301 WM_COPYDATA = &H4A WM_CREATE = &H1 WM_CTLCOLORBTN = &H135 WM_CTLCOLORDLG = &H136 WM_CTLCOLOREDIT = &H133 WM_CTLCOLORLISTBOX = &H134 WM_CTLCOLORMSGBOX = &H132 WM_CTLCOLORSCROLLBAR = &H137 WM_CTLCOLORSTATIC = &H138 WM_CUT = &H300 WM_DDE_ACK = (&H3E0 + 4) WM_DDE_ADVISE = (&H3E0 + 2) WM_DDE_DATA = (&H3E0 + 5) WM_DDE_EXECUTE = (&H3E0 + 8) WM_DDE_FIRST = &H3E0 WM_DDE_INITIATE = &H3E0 WM_DDE_LAST = (&H3E0 + 8) WM_DDE_POKE = (&H3E0 + 7) WM_DDE_REQUEST = (&H3E0 + 6) WM_DDE_TERMINATE = (&H3E0 + 1) WM_DDE_UNADVISE = (&H3E0 + 3) WM_DEADCHAR = &H103 WM_DELETEITEM = &H2D WM_DESTROY = &H2 WM_DESTROYCLIPBOARD = &H307 WM_DEVICECHANGE = &H219 WM_DEVMODECHANGE = &H1B WM_DRAWCLIPBOARD = &H308 WM_DRAWITEM = &H2B WM_DROPFILES = &H233 WM_ENABLE = &há WM_ENDSESSION = &H16 WM_ENTERIDLE = &H121 WM_ENTERSIZEMOVE = &H231 WM_ENTERMENULOOP = &H211 WM_ERASEBKGND = &H14 WM_EXITMENULOOP = &H212 WM_EXITSIZEMOVE = &H232 WM_FONTCHANGE = &H1D WM_GETDLGCODE = &H87 WM_GETFONT = &H31 WM_GETHOTKEY = &H33 WM_GETMINMAXINFO = &H24 WM_GETTEXT = &HD WM_GETTEXTLENGTH = &HE WM_HELP = &H53 WM_HOTKEY = &H312 WM_HSCROLL = &H114 WM_HSCROLLCLIPBOARD = &H30E WM_ICONERASEBKGND = &H27 WM_IME_CHAR = &H286 WM_IME_COMPOSITION = &H10F WM_IME_COMPOSITIONFULL = &H284 WM_IME_CONTROL = &H283 WM_IME_ENDCOMPOSITION = &H10E WM_IME_KEYDOWN = &H290 WM_IME_KEYLAST = &H10F WM_IME_KEYUP = &H291 WM_IME_NOTIFY = &H282 WM_IME_SELECT = &H285 WM_IME_SETCONTEXT = &H281 WM_IME_STARTCOMPOSITION = &H10D WM_INITDIALOG = &H110 WM_INITMENU = &H116 WM_INITMENUPOPUP = &H117 WM_INPUTLANGCHANGEREQUEST = &H50 WM_INPUTLANGCHANGE = &H51 WM_KEYDOWN = &H100 WM_KEYUP = &H101 WM_KILLFOCUS = &H8 WM_LBUTTONDBLCLK = &H203 WM_LBUTTONDOWN = &H201 WM_LBUTTONUP = &H202 WM_MBUTTONDBLCLK = &H209 WM_MBUTTONDOWN = &H207 WM_MBUTTONUP = &H208 WM_MDIACTIVATE = &H222 WM_MDICASCADE = &H227 WM_MDICREATE = &H220 WM_MDIDESTROY = &H221 WM_MDIGETACTIVE = &H229 WM_MDIICONARRANGE = &H228 WM_MDIMAXIMIZE = &H225 WM_MDINEXT = &H224 WM_MDIREFRESHMENU = &H234 WM_MDIRESTORE = &H223 WM_MDISETMENU = &H230 WM_MDITILE = &H226 WM_MEASUREITEM = &H2C WM_MENUCHAR = &H120 WM_MENUSELECT = &H11F WM_MENURBUTTONUP = &H122 WM_MENUDRAG = &H123 WM_MENUGETOBJECT = &H124 WM_MENUCOMMAND = &H126 WM_MOUSEACTIVATE = &H21 WM_MOUSEHOVER = &H2A1 WM_MOUSELEAVE = &H2A3 WM_MOUSEMOVE = &H200 WM_MOUSEWHEEL = &H20A WM_MOVE = &H3 WM_MOVING = &H216 WM_NCACTIVATE = &H86 WM_NCCALCSIZE = &H83 WM_NCCREATE = &H81 WM_NCDESTROY = &H82 WM_NCHITTEST = &H84 WM_NCLBUTTONDBLCLK = &HA3 WM_NCLBUTTONDOWN = &HA1 WM_NCLBUTTONUP = &HA2 WM_NCMBUTTONDBLCLK = &HA9 WM_NCMBUTTONDOWN = &HA7 WM_NCMBUTTONUP = &HA8 WM_NCMOUSEMOVE = &HA0 WM_NCPAINT = &H85 WM_NCRBUTTONDBLCLK = &HA6 WM_NCRBUTTONDOWN = &HA4 WM_NCRBUTTONUP = &HA5 WM_NEXTDLGCTL = &H28 WM_NEXTMENU = &H213 WM_NULL = &H0 WM_PAINT = &HF WM_PAINTCLIPBOARD = &H309 WM_PAINTICON = &H26 WM_PALETTECHANGED = &H311 WM_PALETTEISCHANGING = &H310 WM_PARENTNOTIFY = &H210 WM_PASTE = &H302 WM_PENWINFIRST = &H380 WM_PENWINLAST = &H38F WM_POWER = &H48 WM_POWERBROADCAST = &H218 WM_PRINT = &H317 WM_PRINTCLIENT = &H318 WM_PSD_ENVSTAMPRECT = (&H400 + 5) WM_PSD_FULLPAGERECT = (&H400 + 1) WM_PSD_GREEKTEXTRECT = (&H400 + 4) WM_PSD_MARGINRECT = (&H400 + 3) WM_PSD_MINMARGINRECT = (&H400 + 2) WM_PSD_PAGESETUPDLG = (&H400) WM_PSD_YAFULLPAGERECT = (&H400 + 6) WM_QUERYDRAGICON = &H37 WM_QUERYENDSESSION = &H11 WM_QUERYNEWPALETTE = &H30F WM_QUERYOPEN = &H13 WM_QUEUESYNC = &H23 WM_QUIT = &H12 WM_RBUTTONDBLCLK = &H206 WM_RBUTTONDOWN = &H204 WM_RBUTTONUP = &H205 WM_RENDERALLFORMATS = &H306 WM_RENDERFORMAT = &H305 WM_SETCURSOR = &H20 WM_SETFOCUS = &H7 WM_SETFONT = &H30 WM_SETHOTKEY = &H32 WM_SETREDRAW = &HB WM_SETTEXT = &HC WM_SETTINGCHANGE = &H1A WM_SHOWWINDOW = &H18 WM_SIZE = &H5 WM_SIZING = &H214 WM_SIZECLIPBOARD = &H30B WM_SPOOLERSTATUS = &H2A WM_SYSCHAR = &H106 WM_SYSCOLORCHANGE = &H15 WM_SYSCOMMAND = &H112 WM_SYSDEADCHAR = &H107 WM_SYSKEYDOWN = &H104 WM_SYSKEYUP = &H105 WM_TIMECHANGE = &H1E WM_TIMER = &H113 WM_UNDO = &H304 WM_USER = &H400 WM_VKEYTOITEM = &H2E WM_VSCROLL = &H115 WM_VSCROLLCLIPBOARD = &H30A WM_WINDOWPOSCHANGED = &H47 WM_WINDOWPOSCHANGING = &H46 WM_WININICHANGE = &H1A WM_APPCOMMAND = &H319 End Enum[/codebox]
  11. kuroi

    Calcular Idade

    opa, demorei mas testei aqui. só fiz uma modificacao, na funcao. adicionei um segundo ElseIf quando o mes for igual pra testar quando for dia 29 e o cara tiver nascido no dia 28. ai fiz os esquemas pra funcionar como uma Function e ficou tipo assim: Public Function CalculaIdade(DtNasc As Date) As Integer Dim DtAtual As Date, Bissexto As Date Dim Idade As Integer DtAtual = CDate(Date) Bissexto = DateSerial(Year(DtAtual), 2, 29) 'Caso o mês do nascimento seja maior que o mês atual If Month(DtNasc) > Month(DtAtual) Then Idade = Year(DtAtual) - Year(DtNasc) - 1 'Caso o mês do nascimento seja igual ao mês atual ElseIf Month(DtNasc) = Month(DtAtual) Then If Day(DtNasc) = 29 And Month(DtNasc) = 2 And Day(DtAtual) >= 28 And Day(Bissexto) = 1 Then Idade = Year(DtAtual) - Year(DtNasc) ElseIf Day(DtAtual) = 29 And Month(DtAtual) = 2 And Day(DtNasc) < 29 And Day(Bissexto) = 1 Then Idade = Year(DtAtual) - Year(DtNasc) - 1 ElseIf Day(DtNasc) > Day(DtAtual) Then Idade = Year(DtAtual) - Year(DtNasc) - 1 Else Idade = Year(DtAtual) - Year(DtNasc) End If 'Caso o mês do nascimento seja menor que o mês atual Else Idade = Year(DtAtual) - Year(DtNasc) End If If Idade < 0 Then Idade = 0 CalculaIdade = Idade End Function[/code] parece q agora ta certinha, mas veja ai se você quer fazer algum teste ou modificacao e me avisa e q eu edito la o tópico. ou se você quiser você mesmo pode postar a sua funcao la como resposta.
  12. bom, levando em conta q você deve estar utilizando RecordSet, não entendo muito de DAO, mas pra preencher o combo deve ser tipo assim: Dim rs As DAO.Recordset Set rs = SeuObjetoDatabase.OpenRecordset("NomeDaSuaTabela", dbOpenTable) Do While Not rs.EOF Combo1.AddItem rs("NomeDoSeuCampo") rs.MoveNext Loop[/code] mas aqui tem dois tutoriais q ensinam a usar DAO. esse com controles vinculados: http://www.macoratti.net/datactl.htm esse com RecordSet: http://www.macoratti.net/dao.htm apesar de q o DAO já ta ultrapassado e hj em dia tem o ADO q é bem mais eficiente, mais facil e etc. se você quiser optar por usar ADO, procura la no site do macoratti http://www.macoratti.net/ q tb tem varios tutoriais.
  13. o seu projeto realmente ta como startup na Sub Main ou ele ta como startup no form de Login?? se tiver no form então ele não vai passar na sub main e não vai abrir a conexao. outra coisa, esse codigo q você passou do Login é o codigo todo do formulario?? por acaso você não tem la outra variavel declarada com o nome de conn não?? porque ai ele vai pensar q você ta tentando passar essa varaivel e não a do module.
  14. cara eu mesmo não costumo adicionar relacionamentos no SQL não. tb já cheguei a trabalhar numa empresa relativamente grande de e-commerce e os bancos q usavamos la não tinham relacionamentos fisicos e nunca tivemos problemas com isso. eu particulamente não gosto de adicionar relacionamentos ou chave estrangeiras e etc porque o SQL vai então ter controle maior sobre o banco sobre permissoes e etc e isso atrapalha bastante na hora de fazer alteracoes ou testes no banco. já q nenhum usuario vai ter acesso diretamente ao SQL pra incluir ou alterar dados eu prefiro fazer esse controle eu mesmo pelo meu software ou pagina. pode dar ate mais trabalho, mas assim eu tenho mais controle sobre a aplicacao. tipo, prefiro deixar o SQL aceitar qualquer coisa sem nenhuma consistencia mesmo. se o meu software conseguir fazer toda a validacao e relacionamentos significa q ele sim é muito consistente e bem-feito e é ai q eu sempre pretendo chegar. alem do q, mesmo q o relacionamento estivesse feito, eu trataria as possibilidades no meu software pra evitar as mensagens de erro do SQL, ou seja, seria trabalho em dobro. mas se você acha melhor usar relacionamentos, então beleza. fora q, como você diz, as tabelas estao mal normalizadas então realmente precisa de manutencao. e tb esse é meu ponto de vista como programador e você tem o seu como dba. mas pelo q eu entendi você ta com receio de q as alteracoes no banco possam causar problemas para o software certo?? nesse caso você deveria alterar o banco em conjunto com o software. ai no caso eu recomendaria q você fizesse uma copia da base de dados pra um database a parte so pra acesso seu pra q você possa testar as alteracoes tanto do banco quanto do software. não sei se você pode ai fazer alteracoes no software, mas o esquema seria tb os programadores trabalharem em conjunto com você nesse banco a parte. ai você não liberaria nenhuma alteracao aos usuarios enquanto você não tivesse certeza q estivesse tudo funcionando certinho no seu database separado. ai você poderia ir liberando aos poucos assim como podia liberar depois de fazer a reestruturacao geral com os relacionamentos e tudo mais, dependendo do q for melhor pra você. apesar de q eu acho a primeira opcao melhor, pois assim você vai vendo aos poucos o q cada alteracao vai causar na pratica e qualquer problema q der vai ser coisa pequena. isso realmente pode levar bastante tempo, mas você vai poder trabalhar com calma e ter um controle geral da situacao.
  15. você ta trabalhando com DAO ou ADO?? você ta usando controles vinculados (DataControl) ou RecordSet?? sua duvida é o codigo de como fazer o select, o codigo de como fazer pra preencher ou é selecionar de acordo com o relacionamento das tabelas??
  16. kuroi

    Asp

    tópico fechado. respostas aqui: http://scriptbrasil.com.br/forum/index.php?showtopic=110686
  17. kuroi

    Pesquisa Em Sql

    veja se é isso: Select * From FornXPecas As FP INNER JOIN Fornecedor As F ON FP.CodForn = F.Cod INNER JOIN Pecas As P ON FP.CodPecas = P.Cod Where P.Cidade = F.Cidade
  18. tópico fechado por duplicacao. respostas aqui: http://scriptbrasil.com.br/forum/index.php?showtopic=110662
  19. entendi, mas não sei como ficaria isso no firebird, mas você não pode fazer isso via programacao, tipo você esta programando em alguma linguagem pra fazer seu programa, site, etc, certo??
  20. você so pode usar o AddNew se o RecordSet estiver aberto e você tiver permissao pra isso de acordo com o LockType e o CursorType. ou seja, pelo q eu disse aqui: você não vai poder. se você abrir pelo metodo Open (e passar os parametros corretos pra ter as permissoes), é só você usar o metodo AddNew, em seguida passar os valores pros campos e ai usar o Update. mas independente do RecordSet, você pode fazer o Insert por query assim como o Update e o Delete: SQL = "Insert Into TabelaClientes (Campo1, Campo2) Values(Valor1, Valor2)" cnn.Execute SQL[/code] você não precisa de RecordSet pra executar querys no banco. você so precisa dele pra armazenar os registros q forem retornados (caso algum seja retornado, ou seja, apenas no caso de Select). só vai precisar se em algum momento você fizer Set RS = Nothing. já q esse comando zera o RecordSet e os RecordSets, assim como qualquer outro objeto, só podem ser usados depois de (re)inicializados. só se você quiser. acho q usando o Close ele deve liberar os registros do Select da memoria, então se você achar interessante pode usar a vontade.
  21. ue, não seria so isso daqui?? string sql = "Select * From Tabela"; string filtro = ""; if (txtMarca.Text != "") { filtro += (filtro == "" ? " Where " : " And ") + " Marca = '" + txtMarca.Text + "'"; } ... ... ... if (txtValor.Text != "") { filtro += (filtro == "" ? " Where " : " And ") + " Valor = '" + txtValor.Text + "'"; } sql += filtro;[/code] e pra facilitar ainda mais, acho q é possivel fazer tudo isso num for pegando pelo Request.Form, assim não precisaria de um if pra cada campo e nem especificar os nomes deles. EDITADO: alias, alguém move aqui pra .NET
  22. o forum SQL Server é so pra postar sobre o (software) SQL Server e não sobre a linguagem SQL. vo mover pra demais bancos, mas olhando aqui, se você vai setar 5 (ou algum otro valor especifico) pro centrocusto q é comum entre as duas tabelas, porque então precisaria de outro select?? não pode ser só assim?? delete from folha where tipofolha=6 and ano=2007 and centrocusto = 5[/code]
  23. acontece q fazendo assim: set rs = cnn.Execute(SQL) ele abre o RecordSet mas não te da permissao pra Update ou Delete nele, já q esse comando seta o LockType como ReadOnly. você so poude usar o comando Update e o Delete abrindo o RecordSet pelo comando Open mesmo. nesse caso o q costumamos fazer seria tipo isso: SQL = "SELECT * FROM TabelaClientes" set rs = cnn.Execute(SQL) '------------ 'Pra Update SQL = "Update TabelaClientes Set Campo = 'valor' Where Codigo = " & rs!Codigo cnn.Execute SQL '------------ 'Pra Excluir SQL = "Delete From TabelaClientes Where Codigo = " & rs!Codigo cnn.Execute SQL[/code]
  24. kuroi

    (Resolvido) Textbox

    nesse caso deve funcionar com CDbl().
×
×
  • Criar Novo...