Ir para conteúdo

POWERED BY:

Arquivado

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

Guilherme Teixeira

É possivel em SQL?

Recommended Posts

Pessoal gostaria de bolar um sistema em ASP com SQL, que via criar colunas e inserir dados nelas, até ai tudo eu sei como fazer. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

Contudo eu iria precisar, na hora de emitir o relatório, colocar nele o nome da coluna. Existe algum código que recupere o nome da coluna para eu colocar no relatório?

:unsure:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal gostaria de bolar um sistema em ASP com SQL, que via criar colunas e inserir dados nelas, até ai tudo eu sei como fazer. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

Contudo eu iria precisar, na hora de emitir o relatório, colocar nele o nome da coluna. Existe algum código que recupere o nome da coluna para eu colocar no relatório?

:unsure:

Oi, é possível saber qual o nome das colunas do Recordset sim e acredito que esta é uma coisa que é muito mal documentada mesmo. Como a linguagem padrão do ASP é VBScript, esta linguagem tem algumas "vantagens" de aprendizado sobre as outras linguagens. Esta vantagem acaba se tornando uma desvantagem a longo prazo. Por exemplo, cansei de ver exemplos de utilização de banco de dados assim:

 

dim Conn, Rs
set Conn = Server.createObject("ADODB.Connection")
Conn.open( ... )
set Rs = Conn.execute()
.
Response.write(Rs(0))
.
set Rs = nothing
Conn.close()
set Conn = nothing

O que muita gente não sabe direito, é que esse "Rs(0)" aí, é interpretado como "Rs.Fields.Item(0).value" no VBScript. É muito saber disso, pois quando você está codificando com outra linguagem, javascript por exemplo, quando você diz Rs(0) o ASP te envia um Object e não o valor nativo, aí você vai todo bonitão fazer uma comparação Rs(0) == "valor" e SEMPRE DÁ FALSE, pois um objeto nunca é igual a um String.

 

Bom, dito isto, vale lembrar também que uma pessoa que "aprende na prática", muitas vezes olhando este exemplo, tem um conceito errado sobre o recordset. De fato, notei que nem mesmo sites como o http://www.w3schools.com/ indicam o uso correto do recordset. Então aqui vai a dica:

 

Se o Item é uma coleção de objetos e não valores, significa que cada objeto deve possuir mais de uma propriedade, caso contrário não haveria necessidade de ser um objeto como é, não é? Pois então, pasmem, o objeto saber em qual coluna está, é uma propriedade também!!! Você pode facilmente coletar este dado utilizando a notação completa ou variações dela:

 

Rs.Fields.Item(n).name
Rs.Fields(n).name
Rs(n).name

Não vejo problema nenhum em utilizar as versões "shortcut" do Recordset, mas é necessário compreender o que ocorre de facto, antes de utilizá-las.

 

Boa diversão!

Fabio Zendhi Nagao (nagaozen)

Compartilhar este post


Link para o post
Compartilhar em outros sites

sua duvida é de sql e não asp.

 

no sqlserver tem as stored procedures de sistema. uma que você pode usar é a seguinte

 

a sugestão do colega nagaozen é boa porém mais lenta pois requer recursos de sql e do ado

 

SELECT 
syscolumns.name
FROM sysobjects,syscolumns WHERE sysobjects.type = 'U' AND sysobjects.name = 'TABELA'

Compartilhar este post


Link para o post
Compartilhar em outros sites

procure por ADO Schemas,Você pode estudar um esquema para a tabela nomes e nomes de colunas detalhadamente as informações assim.

 

<html><head>
<TITLE>dbschemasall.asp</TITLE>
</head>
<body bgcolor="#FFFFFF">
<!--#INCLUDE VIRTUAL="/ADOVBS.INC" -->
<!--#INCLUDE VIRTUAL="/learn/test/lib_schemas.asp" -->
<% 
	myDSN="DSN=Student;uid=student;pwd=magic"

	DIM colschema(30)
	colschema(0)=adSchemaProviderSpecific
	colschema(1)=adSchemaAsserts
	colschema(2)=adSchemaCatalogs
	colschema(3)=adSchemaCharacterSets
	colschema(4)=adSchemaCollations
	colschema(5)=adSchemaColumns
	colschema(6)=adSchemaCheckConstraints
	colschema(7)=adSchemaConstraintColumnUsage
	colschema(8)=adSchemaConstraintTableUsage
	colschema(9)=adSchemaKeyColumnUsage
	colschema(10)=adSchemaReferentialContraints
	colschema(11)=adSchemaTableConstraints
	colschema(12)=adSchemaColumnsDomainUsage
	colschema(13)= adSchemaIndexes
	colschema(14)=adSchemaColumnPrivileges
	colschema(15)=adSchemaTablePrivileges
	colschema(16)=adSchemaUsagePrivileges
	colschema(17)=adSchemaProcedures
	colschema(18)=adSchemaSchemata
	colschema(19)=adSchemaSQLLanguages
	colschema(20)=adSchemaStatistics
	colschema(21)=adSchemaTables
	colschema(22)=adSchemaTranslations
	colschema(23)=adSchemaProviderTypes
	colschema(24)=adSchemaViews
	colschema(25)=adSchemaViewColumnUsage
	colschema(26)=adSchemaViewTableUsage
	colschema(27)=adSchemaProcedureParameters
	colschema(28)=adSchemaForeignKeys
	colschema(29)=adSchemaPrimaryKeys
	colschema(30)=adSchemaProcedureColumns

	FOR counter=1 to 30
			If counter<>2 then
		thisSchema=colSchema(counter)
		Call Schema2Table(myDSN,thisSchema)
		response.write "<p>"
			End If
	NEXT
%>
</body></html>

Os arquivo de include lib_schemas.asp:

 

<%
FUNCTION schemaName(parm1)
	SELECT CASE parm1
	CASE adSchemaProviderSpecific
		schemaname="adSchemaProviderSpecific"
	CASE adSchemaAsserts
		schemaName="adSchemaAsserts"		
	CASE adSchemaCatalogs
		schemaName="adSchemaCatalogs"
	CASE adSchemaCharacterSets
		schemaName="adSchemaCharacterSets"
	CASE adSchemaCollations
		schemaName="adSchemaCollations"
	CASE adSchemaColumns
		schemaName="adSchemaColumns"
	CASE adSchemaCheckConstraints
		schemaName="adSchemaCheckConstraints"
	CASE adSchemaConstraintColumnUsage
		schemaName="adSchemaConstraintColumnUsage"
	CASE adSchemaConstraintTableUsage
		schemaName="adSchemaConstraintTableUsage"
	CASE adSchemaKeyColumnUsage
		schemaName="adSchemaKeyColumnUsage"
	CASE adSchemaReferentialContraints
		schemaName="adSchemaReferentialContraints"
	CASE adSchemaTableConstraints
		schemaName="adSchemaTableConstraints"
	CASE adSchemaColumnsDomainUsage
		schemaName="adSchemaColumnsDomainUsage"
	CASE adSchemaIndexes
		schemaName="adSchemaIndexes"
	CASE adSchemaColumnPrivileges
		schemaName="adSchemaColumnPrivileges"
	CASE adSchemaTablePrivileges
		schemaName="adSchemaTablePrivileges"
	CASE adSchemaUsagePrivileges
		schemaName="adSchemaUsagePrivileges"
	CASE adSchemaProcedures
		schemaName="adSchemaProcedures"
	CASE adSchemaSchemata
		schemaName="adSchemaSchemata"
	CASE adSchemaSQLLanguages
		schemaName="adSchemaSQLLanguages"
	CASE adSchemaStatistics
		schemaName="adSchemaStatistics"
	CASE adSchemaTables
		schemaName="adSchemaTables"
	CASE adSchemaTranslations
		schemaName="adSchemaTranslations"
	CASE adSchemaProviderTypes
		schemaName="adSchemaProviderTypes"
	CASE adSchemaViews
		schemaName="adSchemaViews"
	CASE adSchemaViewColumnUsage
		schemaName="adSchemaViewColumnUsage"
	CASE adSchemaViewTableUsage
		schemaName="adSchemaViewTableUsage"
	CASE adSchemaProcedureParameters
		schemaName="adSchemaProcedureParameters"
	CASE adSchemaForeignKeys
		schemaName="adSchemaForeignKeys"
	CASE adSchemaPrimaryKeys
		schemaName="adSchemaPrimaryKeys"
	CASE adSchemaProcedureColumns
		schemaName="adSchemaProcedureColumns"
	CASE ELSE
		schemaName="-unknown-"
	END SELECT
END FUNCTION

SUB Schema2Table(parmDSN, parmSchemaName)
		set conntemp=server.createobject("adodb.connection")
		conntemp.open parmDSN

		on error resume next
		set rsSchema=conntemp.OpenSchema(parmSchemaName)

		IF err.number=3251 THEN
			response.flush
			response.write "<b>" & SchemaName(parmSchemaName) 
			response.write "</b><br>  não suporta <br>"
			err.clear
		ELSE
			Call Schema2Table(thisSchema)
			response.write "<P><b>" & schemaName(parmSchemaName) & "</b><br>"
			response.write "<table border=1><tr>"
		  'Coloque sobre a tabela os Nomes dos Campos
			for each whatever in rsSchema.fields
				   response.write "<td><b>" & whatever.name & "</b></td>"
			next
			response.write "</tr>"
			DO UNTIL rsSchema.eof
				response.write "<tr>"
				   for each whatever in rsSchema.fields
					  thisfield=whatever.value
					  if isnull(thisfield) then
						thisfield=" "
					end if
					if trim(thisfield)="" then
						thisfield=" "
					end if
							 response.write "<td valign=top>" & thisfield & "</td>"
				  next
				response.write "</tr>"
				rsSchema.MoveNext
			LOOP
			response.write "</table><br>"
			response.flush
		END IF
	
	rsSchema.Close
	set rsSchema=nothing

	conntemp.close
	set conntemp=nothing
END SUB
%>

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.