Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

razs

[Resolvido] Alter table

Recommended Posts

Boas, preciso de uma ideia para fazer uma coisa, ando aqui as voltas mas nao consigo pensar num maneira de fazer isto.

 

Tenho uma tabela com os campos user, data, study e preciso de um botao que me permita inserir mais que um study, estava a pensar incrementar um campo com o nome study1 e por ai fora.

 

tipo isto:

<%
if study00 ="" then
study00=1
else
study00 = "study" + 1
end if

ALTER TABLE studys ADD "'&study00&'" memo
%>

 

 

Mas depois quando se passar a mesma coisa com outro user? Tenho de verificar todas as colunas para ver qual esta vazia e inserir la??

 

Assim como depois terei de ter todos os studys com checkboxes para selecionar os que pretendo para aquele user.

 

Alguma ideia da melhor maneira para fazer isto?

Compartilhar este post


Link para o post
Compartilhar em outros sites

É mais ou menos isto.

 

 

<form name="insform" method="POST" id="insform">
<h4>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</h4>
<br><u><B><% response.write request.queryString("msg") %></B></u>
<br>	           		
<div class="field"><label>Choose Study:</label><select size="1" name="Study" id="">
		<option selected>Choose</option>
<%While Not rs.EOF%>
		<option value="<%= rs("nome_study") %>"><%= rs("nome_study") %></option>
<%
rs.MoveNext
Wend
rs.Close
Set rs = Nothing
conn.close
set conn= nothing
%>
</select>*</div>	

<br><br>

<%
set conn = CreateObject("ADODB.Connection")
conn.Provider = "Microsoft.Jet.Oledb.4.0"
conn.Open Server.MapPath("db/12345678.mdb")
set rs2=server.createobject("adodb.recordset")
instotal2 = "select center from users group by center" 
rs2.open instotal2,conn,2,2
%>	
<div class="field"><label>Choose center:</label><select size="1" name="center" id="">
		<option selected>Choose</option>
<%While Not rs2.EOF%>
		<option value="<%= rs2("center") %>"><%= rs2("center") %></option>

<%
rs2.MoveNext
Wend

centros = "blahblahblah" 'Como chamo o valor selecionado no select anterior de modo a fazer o select em baixo???
rs2.Close
Set rs2 = Nothing
%>
</select>*</div>	



<br><br>
Choose users to work with this study.<br><br>
<%
set conn = CreateObject("ADODB.Connection")
conn.Provider = "Microsoft.Jet.Oledb.4.0"
   conn.Open Server.MapPath("db/12345678.mdb")
set rs1=server.createobject("adodb.recordset")
instotal1 = "select * from users where center like '"&centros&"'"
rs1.open instotal1,conn,2,2	

While Not rs1.EOF%>
<div class="checkcolumn">
<div class="field"><label><%=rs1("username")%>:::<%=rs1("nome")%>_<%=rs1("last_name")%></label>
<input type="checkbox" name="checkgroup" value="<%=rs1("username")%>"></div>
</div>
<%
rs1.MoveNext
Wend
rs1.Close
Set rs1 = Nothing
%>
<br><br>
</div>				
	<div class="more_button"><input type="image" class="image" id="insform" name="insform" src="images/ok.jpg"></div>

<br><br><br>
</form>

 

 

Como chamo o valor selecionado no select centros de modo a fazer o select por users relacionados com esse centro???

Compartilhar este post


Link para o post
Compartilhar em outros sites

tem um code que você pode inserir campos adicionais, dá uma olhada

 

/*
* 
* Como usar:
* 		todo o script se baseia nos parâmetros, logo você só terá que defini-los. Sâo eles:
* 			formID » valor do tipe ID que recebe o formulário
* 			buttonAdd » valor do tipo ID que recebe o botão para adicionar;
* 			textButtonRemove » valor do tipo STRING que especifíca o texto que aparecerá no botão de excluir campo
* 			maxInputs » valor do tipo inteiro que especifíca o máximo de campos a serem criado
* 			minInputs » valor do tipo inteiro que especifíca o mínimo de campos, no documento, depois de criados
* 			textLabel » valor do tipo STRING que especifíca o texto que aparecerá no label
*/

window.onload = function(){
addRemoveInput("upload", "btnAdd", "Deletar Campo!", 10, 2, "URL ");
};

function addRemoveInput(formId, buttonAdd, textButtonRemove, maxInputs, minInputs, textLabel){
var form = document.getElementById(formId);
var btnAdd = document.getElementById(buttonAdd);
var inputs = 0;
var labels = document.getElementsByTagName("label");

btnAdd.onclick = addInput;

function addInput(){
	if(labels.length < maxInputs){
		++inputs;

		var label = document.createElement("label");
		var input = document.createElement("input");
		var btnRemove = document.createElement("input");

		label.innerHTML = textLabel + inputs;
		input.setAttribute("type", "text");
		btnRemove.setAttribute("type", "button");
		btnRemove.setAttribute("value", textButtonRemove);

		label.appendChild(input);

		if(labels.length < minInputs){ 
			form.appendChild(label);
		} else{
			label.appendChild(btnRemove);
			form.appendChild(label);
		}
		btnRemove.onclick = removeInput;

	} else alert("Você pode adicionar até " + maxInputs + " campos!");
}

function removeInput(){
	if(labels.length == minInputs + 1){
		inputs--;
		alert("Você deve deixar no mínimo " + minInputs + " campo(s)!");
		form.removeChild(this.parentNode);
	} else{
		inputs--;
		form.removeChild(this.parentNode);
	}
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Afinal nao... nao consigo passar as variaveis atravez dos passos

e a variavel stud passa o primeiro registo mesmo que eu escolha outro qualquer.

 

	instotal = "select study from users group by study" 
rs.open instotal,conn,2,2
%>	
<form name="form_study" method="POST" id="form_study" action="adduserstudy.asp">
<div class="field"><label>Choose Study:</label><select size="1" name="study" onChange="FormSubmits('adduserstudy.asp?stud=<%=rs("study")%>')">
<%
		if request.querystring("stud") ="" then
		varstudy = "Choose" 
		else
		varstudy = request.querystring("stud")
		end if
%><option selected><%response.write ""&varstudy&""%></option>
<%While Not rs.EOF%>
		<option value="<%= rs("study") %>"><%= rs("study") %></option>
<%
rs.MoveNext
Wend
rs.Close
Set rs = Nothing
%>
</select>*</div>	
</form>
<%



set conn = CreateObject("ADODB.Connection")
conn.Provider = "Microsoft.Jet.Oledb.4.0"
   conn.Open Server.MapPath("db/12345678.mdb")
set rs2=server.createobject("adodb.recordset")
instotal2 = "select center from users group by center" 
rs2.open instotal2,conn,2,2
%>				
<form name="form_center" method="POST" id="form_center" action="adduserstudy.asp">
<div class="field"><label>Choose Center:</label><select name="center" onChange="FormSubmitc('adduserstudy.asp?stud=<%=stud%>')">

<%	if request.querystring("cent") ="" then
		varcentro = "Choose" 
		else
		varcentro = request.querystring("cent")
		end if
%>

		<option selected><%response.write ""&varcentro&""%></option>
<%While Not rs2.EOF%>
		<option value="<%= rs2("center") %>"><%= rs2("center") %></option>
<%
rs2.MoveNext
Wend
rs2.Close
Set rs2 = Nothing
%>
</select>*</div>	
</form>


<br><br>
Choose Users from : <%response.write (request.querystring("cent"))%> for <%response.write (request.querystring("stud"))%> Study.

<%
center = request.form("center")

set conn = CreateObject("ADODB.Connection")
conn.Provider = "Microsoft.Jet.Oledb.4.0"
   conn.Open Server.MapPath("db/12345678.mdb")
set rs1=server.createobject("adodb.recordset")
instotal1 = "select * from users where center like '" & Request.Form("center")& "'"
rs1.open instotal1,conn,2,2	

While Not rs1.EOF%>
<form name="insform0" action="adduserstudy.asp" method="post">
<div class="checkcolumn">
<div class="field"><label><%=rs1("username")%>:::<%=rs1("nome")%>_<%=rs1("last_name")%></label>
<input type="checkbox" name="checkgroup" value="<%=rs1("username")%>"></div>
</div>
<%
rs1.MoveNext
Wend
rs1.Close
Set rs1 = Nothing
%>
<br>
</div>
<input type="button" name="CheckAll" value="Check All" onClick="checkAll(document.insform0.checkgroup)">
<input type="button" name="UnCheckAll" value="Uncheck All" onClick="uncheckAll(document.insform0.checkgroup)">

<br><br>			
	<div class="more_button"><input type="image" class="image" id="insform" name="insform" src="images/ok.jpg"></div>

<br><br><br>
</form>

Compartilhar este post


Link para o post
Compartilhar em outros sites

afinal, você conseguiu resolver ou não

Compartilhar este post


Link para o post
Compartilhar em outros sites

isto agora ja funciona mas so ativa a segunda ou seja tenho de fazer a operação duas vezes para ele passar a variavel.

 

<form name="form_center" method="POST" id="form_center" action="adduserstudy.asp">
<div class="field"><label>Choose Center:</label><select name="center" onChange="FormSubmitc('adduserstudy.asp?stud=<%=stud%>¢=<%=request.form("center")%>')">

<%	if request.querystring("cent") ="" then
		varcentro = "Choose" 
		else
		varcentro = request.querystring("cent")
		end if
%>

		<option selected><%response.write ""&varcentro&""%></option>
<%While Not rs2.EOF%>
		<option value="<%= rs2("center") %>"><%= rs2("center") %></option>
<%
rs2.MoveNext
Wend
rs2.Close
Set rs2 = Nothing
%>
</select></div>	
</form>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Penso que consegui por a coisa a funcionar com hidden input para passar a informação.

 

Ele faz a alteração para um user mas quando seleciono mais que um user ele da erro, como posso fazer para que ele actualize os dados para cada utilizador selecionado??

<h4>Add user to study <%=request.querystring("nom")%></h4>
<br><u><B><% response.write request.queryString("msg") %></B></u>
<%
instotal2 = "select center from centros group by center" 
rs.open instotal2,conn,2,2
%>	
<form name="form_center" method="POST" id="insform">	

<div class="field"><label>Choose Center:</label><select name="center" onChange="FormSubmit('adduserstudy.asp?id=<%= request.querystring("id")%>&nom=<%= request.querystring("nom")%>')">

<%if request.form("center")="" then%>
<option selected>Choose</option>
<%else%>
<option selected><%Request.Form("center")%></option>
<%end if
While Not rs.EOF%>
		<option value="<%= rs("center") %>"><%= rs("center") %></option>
<%
rs.MoveNext
Wend
rs.Close
Set rs = Nothing
%>
</select></div>	

</form>


<br><br>
Choose Users from <%response.write (request.form("center"))%>:<br><br>

<%
campocenter = request.form("center")
id= request.form("id")

set conn = CreateObject("ADODB.Connection")
conn.Provider = "Microsoft.Jet.Oledb.4.0"
   conn.Open Server.MapPath("db/12345678.mdb")
set rs1=server.createobject("adodb.recordset")
instotal1 = "select * from users where center like '" & campocenter& "'"
rs1.open instotal1,conn,2,2	

While Not rs1.EOF%>
<form name="insform0" action="adduserstudy.asp" method="post">
<div class="checkcolumn">
<div class="field"><label><%=rs1("username")%></label>
<input type="checkbox" name="checkgroup" value="<%=rs1("username")%>"></div>

</div>
<%
rs1.MoveNext
Wend
rs1.Close
Set rs1 = Nothing
%>
<br>
</div>
<input type="button" name="CheckAll" value="Check All" onClick="checkAll(document.insform0.checkgroup)">
<input type="button" name="UnCheckAll" value="Uncheck All" onClick="uncheckAll(document.insform0.checkgroup)">
<input type="input" name="nom" id="textboxes" value="<%=request.querystring("nom")%>">

<br><br>			
	<div class="more_button"><input type="image" class="image" id="insform" name="insform" src="images/ok.jpg"></div>

<br><br><br>
</form>
		</div>
	</div>
</div>
</div>
<%

set conn = CreateObject("ADODB.Connection")
conn.Provider = "Microsoft.Jet.Oledb.4.0"
conn.Open Server.MapPath("db/12345678.mdb")
set rs=server.createobject("adodb.recordset")

if request.form("insform.x")>0 then
addusers
end if

sub addusers()

instotal = "select * from users where username like '"&request.form("checkgroup")&"'"
rs.open instotal,conn,2,2

rs.update
   rs.fields("add_2study_by")=Session("user")
rs.fields("study")=request.form("nom")


rs.update
rs.close	

Response.Redirect("adduserstudy.asp?msg=Users added to study sucessfully.")	

 conn.close
end sub

%>

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

recupere os valores e faz um loop na sua string SQL

Compartilhar este post


Link para o post
Compartilhar em outros sites

Penso que seja assim

 

if request.form("insform.x")>0 then
addusers
end if

sub addusers()
for each x in Request.Form 

instotal = "select * from users where username like '"&request.form("checkgroup")&"'"
rs.open instotal,conn,2,2

rs.update
   rs.fields("add_2study_by")=Session("user")
rs.fields("study")=request.form("nom")

 next
rs.update
rs.close	

Response.Redirect("adduserstudy.asp?msg=Users added to study sucessfully.")	

 conn.close
end sub

 

Mas da-me erro

 

ADODB.Recordset error '800a0bcd'

 

Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.

 

/usercorc/adduserstudy.asp, line 217

 

line 217 --> rs.update

Compartilhar este post


Link para o post
Compartilhar em outros sites

A causa mais provável, é que não há registro. Para evitar esse erro de "explodir" sua página ASP, você precisa usar o if not rs.eof then e ao inves de usar o metodo UPDATE do objeto recordset, use a SQL UPDATE. Se você está certo de que há resultados, você pode verificar que a versão mais recente do MDAC

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim existem dados e se eu selecionar apenas um user ele faz as alterações normalmente, apenas falha quando seleciono mais que um user, pensei que podia resolver isso com um loop assim "for each x in Request.Form" mas esta a faltar alguma coisa

Compartilhar este post


Link para o post
Compartilhar em outros sites

faz como eu disse no post #9, recupere todos os dados, dá um SPLIT na variavel e faz um loop na SQL

Compartilhar este post


Link para o post
Compartilhar em outros sites

fiz assim

 

 

for x = 1 to request.form.count()
if request.form.item(x)<>"" then 
if request.Form.key(x)<>"Submit" then
response.write "<b>" & (request.form.key(x) & "</b> = ")
response.write(request.form.item(x) & "<br>")






set rs=server.createobject("adodb.recordset")
instotal = "select * from users where username like '"&request.form("checkgroup")&"'"
rs.open instotal,conn,2,2

response.write instotal



rs.update
   rs.fields("add_2study_by")=Session("user")
rs.fields("study")=request.form("nom")


End If
End If
next 

 

 

Mas quando tento fazer o update de mais que um user ele junto todos os nomes

 

checkgroup = ras, jose, user2, user4, carlos1234, joao, sofia, biatriz

select * from users where username like 'ras, jose, user2, user4, carlos1234, joao, sofia, biatriz'

 

ADODB.Recordset error '800a0bcd'

 

Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.

 

/usercorc/adduserstudy.asp, line 231

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha este exemplo, onde recupero varios valores e depois dou um INSERT no banco

 

if qtd_produtos = "" then
Response.write("erro..."
response.redirect("outra_pagina.asp")
else
qtd_produtos = split(Request.Form("qtd_produtos"),",")
if qtd_produtos = ""
produtos= Split(Request.Form("produtos"), ",")

For i = 1 To Request.Form("produtos").Count

Response.write request.form("produtos")(i)&"<BR>" & request.form("qtd_produtos")(i)&"<BR>"
SQL = "INSERT INTO lista (lista_prodID,lista_quant) Values ('"&request.form("produtos")(i)&"','"&request.form("qtd_produtos")(i)&"')"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado, tentei por assim utilizando a funcao split.

 

	utl_var = split(Request.Form("checkgroup"),",")

       for x = 1 to request.form.count()
if request.form.item(x)<>"" then 
if request.Form.key(x)<>"Submit" then
response.write "<b>" & (request.form.key(x) & "</b> = ")
response.write(request.form.item(x) & "<br>")

       set rs=server.createobject("adodb.recordset")
instotal = "select * from users where username like '"&utl_var&"'"
rs.open instotal,conn,2,2

response.write instotal

rs.update
   rs.fields("add_2study_by")=Session("user")
rs.fields("study")=request.form("nom")
   rs.update

End If
End If
next 

 

Mas da-me Type mismatch

Compartilhar este post


Link para o post
Compartilhar em outros sites

O Type mismatch ocorre no select ?

 

Esse erro é porque os tipos são incompativeis, tente converte-lo para o tipo adequado ao que deseja comparar.

As vezes mesmo sendo ambos aparentemente do mesmo tipo esse esso acontece, ai a solução para a maioria desses casos, é converter ambos para um mesmo tipo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

obrigado vinicius mas nao percebi :s

 

Falas da var no select? Falas alterar '"&utl_var&"'"?

 

obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

use a string SQL UPDATE ao invés do metodo update do objeto recordset, você terá uma ganho de desempenho, e verifique se esta passando texto para campo do tipo texto, ou numerico para campo numerico. qual é a linha que gera o erro ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

o erro é no select

instotal = "select * from users where username like '"&utl_var&"'"

 

Vou tentar alterar como recomendas-te e ja venho dizer o resultado

 

Fiz assim:

	if request.form("insform.x")>0 then
addusers
end if

sub addusers()

utl_var = split(Request.Form("checkgroup"),",")	

for x = 1 to request.form.count()
if request.form.item(x)<>"" then 
if request.Form.key(x)<>"Submit" then

'For i = 1 To Request.Form("checkgroup").Count

instotal= "update INTO users (add_2study_by,study) Values ('"&Session("user")&"','"&request.form("nom")&"') WHERE username like '"&Request.Form("checkgroup")&"'"

'instotal = "select * from users where username like '"&utl_var&"'"
'rs.open instotal,conn,2,2

response.write instotal

'rs.update
   'rs.fields("add_2study_by")=Session("user")
'rs.fields("study")=request.form("nom")
   'rs.update

End If
End If
next 

rs.close	

Response.Redirect("adduserstudy.asp?msg=Users added to study sucessfully.")	

 conn.close
end sub

 

 

Deu-me este erro

update INTO users (add_2study_by,study) Values ('admin','') WHERE username like 'ras'update INTO users (add_2study_by,study) Values ('admin','') WHERE username like 'ras'update INTO users (add_2study_by,study) Values ('admin','') WHERE username like 'ras'

 

ADODB.Recordset error '800a0e78'

 

Operation is not allowed when the object is closed.

 

/usercorc/adduserstudy.asp, line 226

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.