webForumDet fria alternativet

Datalängd på kolumn

ASP

6 svar · 444 visningar · startad av Koplik

Medlem sedan juli 20011 129 inlägg
Frågan#1

Hej, lite panikhjälp här tack! :e

Det är så att jag gjort ett administrationssystem mot SQL-Server, så att om man (som jag) inte har tillgång till Enterprise manager, men ändå vill administrera en SQL-databas så kan man göra det från detta system (förhoppningsvis)

Men för att förfina det så skulle jag vilja hämta ut datalängd på en kolumn, jag har letat lite och testat lite namn för att få tag i den, men icke.

För att få ut datatyp och kolumnamn så har jag hittils gjort på detta vis:

SQLStmt = "Select * From "& Tabell 
Set RS = Conn.Execute(SQLStmt)

Set RSTypes = Conn.OpenSchema(22)

Dim arrData(40, 2)

cLoop = 0
Do Until RSTypes.EOF
	If Not IsEmpty(RSTypes("Type_Name")) Then
		arrData(cLoop, 0) = RSTypes("Type_Name")
		arrData(cLoop, 1) = RSTypes("DATA_TYPE")
		'arrData(cLoop, 2) = RSTypes("Data_Length")
		cLoop = cLoop + 1
	End If
RSTypes.MoveNext
Loop

Och om ni ser den 4:e raden i loopen så försökte jag hämta ut datalängden på kolumen, men det gick inte så fint. Någon som förstår vad jag menar och kanske har något underbart svar!

Jag skulle bli sketaglad då!

Tackar!

Medlem sedan dec. 200012 464 inlägg
#2

Det är nog

Const adSchemaColumns = 4
Set rsTypes = Conn.openSchema(adSchemaColumns, Array(Empty, Empty, Tabell, empty))

som du är ute efter. 22 innebär bara att man visar alla datatyper som finns, inte de som är kopplade till tabellen.

Beskrivningen av recordsetet finns här

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/oledb/htm/oledbcolumns_rowset.asp

Medlem sedan juli 20011 129 inlägg
#3

*bugar*

Tack för din perfekta svar.
Det är väl som dom säger. Du är nog en AI!

Medlem sedan juli 2000619 inlägg
#4

Koplik...

jag håller oxå på med en likadan funktion... hur fick du fram fältets storlek? jag tror jag använder samma utgångskod som dig... dvs den som ligger i filarkivet här på wF.. tabelladmin...

Medlem sedan juli 20011 129 inlägg
#5

Tjena brw!

Tabell = [Namnet på tabellen som bearbetas]
Const adSchemaColumns = 4
Set rsTypes = Conn.openSchema(adSchemaColumns, Array(Empty, Empty, Tabell, empty))
  arrLength = RSTypes.GetRows
Set RSTypes = Nothing

cLoop = 0
Do While Not RS.EOF 
  Response.Write arrLength(13, cLoop) & "<br>"
  cLoop = cLoop + 1
  RS.MoveNext
Loop

Jag hoppas det ger lite klarhet!

Medlem sedan juli 2000619 inlägg
#6

Det ger en viss klarhet men jag får fram längd på fält som inte stämmer riktigt med vad det egentligen är och på vissa fält som är text (access-databas) så får jag inte fram något alls...

Jag har gjort såhär i koden kanske är helt fel?!? :

<%
Tabell = Request.QueryString("Tabell")

Set Conn = Server.CreateObject("ADODB.Connection") 
Conn.Open = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DBPath

If Request.Form("Func") = "Update" Then

Tabell = Request.Form("Tabell")

SQLStmt = "Alter Table "& Tabell &" " 

'Falt0 Falt1 VARCHAR (50) DEFAULT '0' not null "
cLoop = 0
For Each Item In Request.Form
	If Item <> "Tabell" And Item <> "Func" And Left(Item, 3) = "Old" Then
		cLoop = cLoop + 1
		NewShit = "New_" & Request.Form(Item)
		DataTyp = "DataTyp_" & Request.Form(Item)
		SQLStmt = SQLStmt & "Modify (" & Request.Form(Item) & " " & Request.Form(NewShit) & " " & Request.Form(DataTyp) & " NULL), "
	End If
Next

SQLStmt = Left(SQLStmt, Len(SQLStmt) -2) & ""

Response.Write SQLStmt
On error resume next
Conn.Execute(SQLStmt)

Else

SQLStmt = "Select * From "& Tabell 
Set RS = Conn.Execute(SQLStmt)

Set RSTypes = Conn.OpenSchema(22)

Dim arrData(14, 1)

cLoop = 0
Do Until RSTypes.EOF
	If Not IsEmpty(RSTypes("Type_Name")) Then
		arrData(cLoop, 0) = RSTypes("Type_Name")
		arrData(cLoop, 1) = RSTypes("DATA_TYPE")
		arrData(cLoop, 1) = RSTypes("Column_Size")
		cLoop = cLoop + 1
	End If
RSTypes.MoveNext
Loop

Set RSTypes = Nothing

'==================================
' Plocka fram längden på alla fält
'==================================
Const adSchemaColumns = 4
Set rsTypes = Conn.openSchema(adSchemaColumns, Array(Empty, Empty, Tabell, empty))
  arrLength = RSTypes.GetRows
Set RSTypes = Nothing

'cLoop = 0
'Do While Not RS.EOF 
 ' Response.Write arrLength(13, cLoop) & "<br>"
  'cLoop = cLoop + 1
  'RS.MoveNext
'Loop
'Set Rs = Nothing

cLoop = ""

%>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<link REL="STYLESHEET" HREF="style/huvudstyle.css" TYPE="TEXT/CSS">
</HEAD>
<BODY BgColor="#FFFFFF" Text="#000000">

<table width="610" border="0" cellpadding="0" cellspacing="0">
  <tr>
    <td width="5">&nbsp;</td>
    <td width="600"><em class="b">Inställningar &raquo; Tabelladmin &raquo; <u><%=tabell%></u><br><br></em><em>

<a href="Tabell_AddField.asp?Tabell=<%= Tabell%>"><Img Src="Bilder/Create_Table.gif" Border=0>&nbsp;Skapa nytt fält</a>
<br><br>
</em>
      <table border="0" width="100%" cellspacing="0" cellpadding="0">
        <tr>
          <td width="35%" bgcolor="#000000"><em class="mw">Fältnamn</em></td>
          <td width="38%" bgcolor="#000000"><em class="mw">Datatyp</em></td>
	  <td width="9%" bgcolor="#000000"><em class="mw">Fältlängd</em></td>
          <td width="9%" bgcolor="#000000"><p align="center"><em class="mw">Ändra</em></p></td>
          <td width="9%" bgcolor="#000000"><p align="center"><em class="mw">Ta bort</em></p></td>
        </tr>
<%
tcolor = "#cccccc" 

For Each Item In RS.Fields 

counter = counter + 1
If counter Mod 2 = 0 then
  color = tcolor
Else
  color = "#ffffff"
End If

If item.type = "202" Then
  typ = "Text"
  typ2 = "VarChar"
ElseIf item.type = "203" Then
  typ = "PM"
  typ2 = "LongText"
ElseIf item.type = "7" Then
  typ = "Datum/Tid"
  typ2 = "DateTime"
ElseIf item.type = "3" Then
  typ = "Tal"
  typ2 = "Long"
End If
%>
<tr>
          <td width="35%" bgcolor="<%=color%>" valign="top"><em><%=item.name%><%If typ = "Text" Then %><%' item.column_size %><% End If %></em></td>
          <td width="38%" bgcolor="<%=color%>" valign="top"><em><%=typ%></em></td>

          <td width="9%" bgcolor="<%=color%>" valign="top"><em>

<%

If cLoop = "" Then
  cLoop = 0
End If

Response.Write arrLength(13, cLoop) & "<br>"
  cLoop = cLoop + 1
'response.write cLoop
%>
</em></td>
          <td width="9%" bgcolor="<%=color%>" valign="top"><p align="center"><a href="tabell_editfield.asp?field=<%=item.name%>&datatyp=<%=typ2%>&null=NULL&tabell=<%=tabell%>"><img src="../images/icons/redigera.gif" width="17" height="16" border="0"></a></td>
          <td width="9%" bgcolor="<%=color%>" valign="top"><p align="center"><em><a href="#" OnClick="DeletePost('<%= Tabell%>', '<%= Item.Name%>')"><img src="../images/icons/radera.gif" alt="Ta bort" width="14" height="16" border="0"></a></em></td>
</tr>
<% Next %>
		
</Table>

		<br><br>

<a href="Tabell.asp?Tabell=<%= Tabell%>"><<-- Återgå</a>
	</b></font>

<Script Language="Javascript">
function DeletePost(Tabell, Field)
{
	if(confirm("Är du säker på att du vill ta bort fältet \"" + Field + "\"?"))
		location.href = "Tabell_DeleteField.asp?Tabell=" + Tabell + "&Field=" + Field;
}
</Script>

<% 
Conn.Close
Set Conn = Nothing
Set RS = Nothing
%>

<% End If %>
Medlem sedan juli 2000619 inlägg
#7

Koplik....

hur har du skrivit i din kod?

515 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
133 ms — deklarationer (db)
0 ms — hämta statistik (cache)
365 ms — hämta tråd, inlägg och bilagor (db)
143 ms — ändringar (db)