Avatar billede Slettet bruger
03. februar 2007 - 14:50 Der er 17 kommentarer og
1 løsning

Udskriv antallet af kolonner i en tabel

Jeg skal bruge det antal kolonner som er indtaster i en tabel. Det allernemmeste ville være

"SELECT TOP 1 id FROM MyDatabase ORDER BY id DESC"

Men det vil bare udskrive det samlede antal kolonner.

Det jeg har brug for er noget i stil med

"SELECT aktiv FROM MyDatebase WHERE aktiv='true'" hvor den udskriver antallet af 'true' i rækken
Avatar billede lasserasch Juniormester
03. februar 2007 - 14:55 #1
Ikke forstået.

"SELECT TOP 1 id FROm MyDatabase ORDER BY id DESC" udskriver højeste værdi, og kommer kun med en record.

Hvad er det du mener med antal kolonner i en tabel? Det stykke SQL kode du skriver her, vil da aldrig kunne fortæller dig hvor mange columns der er i din tabel.

/Lasse
Avatar billede Slettet bruger
03. februar 2007 - 15:00 #2
I korte træk bare hovrdan jeg får udskrevet antallet af 'true' i rækken 'aktiv'
Avatar billede lasserasch Juniormester
03. februar 2007 - 15:31 #3
Ok. Hvis du vil have det direkte i SQL sætningen, så kan du f.eks. gøre det sådan her :

SELECT COUNT(*) as "AKTIV-RESULT"
FROM MyDatabase
WHERE aktiv = true;


Går næsten ikke udfra at aktiv feltet er char e.lign. som du har skrevet i din første SQL sætning.

/Lasse
Avatar billede Slettet bruger
03. februar 2007 - 16:07 #4
Øhm - nu har den et problem med at finde min repeater

"DataBinder.Eval: 'System.Data.DataRowView' indeholder ikke en egenskab med navnet aktiv"

<%# DataBinder.Eval(Container.DataItem, "aktiv") %>

Skal "AKTIV-RESULT" stå ordret eller er det en værdi som skal indsættes?
Avatar billede lasserasch Juniormester
03. februar 2007 - 16:13 #5
"AKTIV-RESULT" er bare det jeg kaldte resultat feltet. Det kan hedde hvad som helst.

Jeg er ikke lige helt sikker på hvordan du udfører din SQL sætning, men hvis jeg i min database fra min SQL Management studio kører denne query, så får jeg en række som indeholder en record hvor den har talt antallet af records sammen.

kalk_senarios_råvarer er bare en tabel jeg lige havde liggende.

SELECT COUNT(*) as "AKTIV-RESULT"
FROM kalk_senarios_råvarer

/Lasse
Avatar billede Slettet bruger
03. februar 2007 - 16:18 #6
Således ser scriptet ud:

<script runat="server">
void Page_Load(Object semder, EventArgs e){
    OleDbConnection OurConnection;
    OleDbCommand OurCommand;
    OleDbDataAdapter OurDataAdapter;
   
    DataSet OurDataSet;
    OurDataSet = new DataSet();

    OurConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath("db/content.mdb")+";");
    //OurCommand = new OleDbCommand("SELECT aktiv FROM opskrifter WHERE aktiv='true'",OurConnection);
    OurCommand = new OleDbCommand("SELECT COUNT(*) as 'AKTIV-RESULT' FROM opskrifter WHERE aktiv=true",OurConnection);
    OurDataAdapter = new OleDbDataAdapter(OurCommand);
   
    OurDataAdapter.Fill(OurDataSet, "opskrifter");
    MyRepeater.DataSource = OurDataSet.Tables["opskrifter"].DefaultView;
    MyRepeater.DataBind();
}
</script>
</head>
<body>
<ASP:Repeater id="MyRepeater" runat="server">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "aktiv") %>
</ItemTemplate>
</ASP:Repeater>

Og dette er fejlmeddelsen:

System.Web.HttpException: DataBinder.Eval: 'System.Data.DataRowView' indeholder ikke en egenskab med navnet aktiv.

Kildefejl:

Linje 30: <body>
Linje 31: <ASP:Repeater id="MyRepeater" runat="server"><ItemTemplate>
Linje 32: <%# DataBinder.Eval(Container.DataItem, "aktiv") %> <------
Linje 33: </ItemTemplate></ASP:Repeater>
Linje 34: </body>
Avatar billede lasserasch Juniormester
03. februar 2007 - 16:24 #7
Du henter resultatet ud i feltet "AKTIV-RESULT", men forsøger at anvende et felt du har kalt "aktiv".

<%# DataBinder.Eval(Container.DataItem, "aktiv") %>

Hvad sker der hvis du ændrer det til "AKTIV-RESULT" i stedet for "aktiv"???

/Lasse
Avatar billede Slettet bruger
03. februar 2007 - 16:27 #8
Samme resultat:

System.Web.HttpException: DataBinder.Eval: 'System.Data.DataRowView' indeholder ikke en egenskab med navnet AKTIV-RESULT.

Kildefejl:


Linje 30: <body>
Linje 31: <ASP:Repeater id="MyRepeater" runat="server"><ItemTemplate>
Linje 32: <%# DataBinder.Eval(Container.DataItem, "AKTIV-RESULT") %>
Linje 33: </ItemTemplate></ASP:Repeater>
Linje 34: </body>
Avatar billede lasserasch Juniormester
03. februar 2007 - 16:29 #9
Men du fik ikke denne fejl før du ændrede SQL sætningen? Forsøg lige at gøre det modsatte. Altså ændre min SQL sætning til :

OurCommand = new OleDbCommand("SELECT COUNT(*) as 'aktiv' FROM opskrifter WHERE aktiv=true",OurConnection);

Og selvfølgelig ændre til : <%# DataBinder.Eval(Container.DataItem, "aktiv") %> igen.

/Lasse
Avatar billede Slettet bruger
03. februar 2007 - 16:32 #10
Utrolig nok samme resultat:

OurCommand = new OleDbCommand("SELECT COUNT(*) as 'aktiv' FROM opskrifter WHERE aktiv=true",OurConnection);

System.Web.HttpException: DataBinder.Eval: 'System.Data.DataRowView' indeholder ikke en egenskab med navnet aktiv.

Kildefejl:

Linje 30: <body>
Linje 31: <ASP:Repeater id="MyRepeater" runat="server"><ItemTemplate>
Linje 32: <%# DataBinder.Eval(Container.DataItem, "aktiv") %>
Linje 33: </ItemTemplate></ASP:Repeater>
Linje 34: </body>
Avatar billede lasserasch Juniormester
03. februar 2007 - 16:38 #11
Ok. Det er ikke SQL sætningen som indeholder fejl.

Jeg tror nærmere det er dit datagrid som fejer.

Hvad hedder de felter du har i et datagrid? En af dem skal gerne have samme navn som resultatfeltet i SQL sætningen. Jeg er 99,999999999% sikker på at det er derfor du får fejl.

/Lasse
Avatar billede Slettet bruger
03. februar 2007 - 16:47 #12
Som du kan se bruger jeg ikke et DataGrid men en Repeater. Jeg har copy-pastet navnet fra resultatfeltet og ned i repeateren og omvendt adskellige gange med samme resultat hver gang :-(
Avatar billede terry Ekspert
03. februar 2007 - 17:11 #13
I would suggest removing '' from 'aktiv'

("SELECT COUNT(*) as aktiv FROM ....
Avatar billede Slettet bruger
03. februar 2007 - 17:26 #14
Ja NU udskriver den et tal, men ikke det rigtige. I tabellen er der 65 kolonner hvoraf de 45 er sat til 'True' men tallet den udskriver er 62??? *sight*
Avatar billede kjulius Novice
04. februar 2007 - 05:10 #15
Jeg er lidt forvirret. Er det kolonner (aka felter - engelsk: columns / fields) eller rækker (aka individer - engelsk: rows / records) du vil tælle?

Hvis det virkelig er kolonner/felter i en bestemt række/record (eller evt. i alle rækker/records) du vil tælle, kan det ikke bare gøres med en simpel COUNT(*). Men hele dit setup indikerer også mere, at du bare ikke har helt styr på kolonne/række begrebet. Har jeg ret?

Hvis jeg skulle gætte på, hvad problemet kunne være, ville jeg nok prøve at anvende et andet navn på resultatfeltet (på COUNT(*) funktionen) end navnet på det felt der selekteres på, da det muligvis virker forvirrende.
Avatar billede kjulius Novice
04. februar 2007 - 05:16 #16
Du skal i så fald selvfølgelig også huske at rette navnet i din

<%# DataBinder.Eval(Container.DataItem, "aktiv") %>

sætning, så de  stadig passer sammen. :-)
Avatar billede lasserasch Juniormester
04. februar 2007 - 07:28 #17
Hvilken felttype i databasen er det felt hvor siger der står 'True' i?

Du sætter ' ' rundt om True, men True er en boolean værdi. Når man sætter ' ' rundt om feltnavn er det for at finde en tekst værdi. Det skal du i så fald have ændret. Det er både spild af plads i databasen og en programmeringsskamplet :-)...

Det kan måske også være grund til den fejl du får. Jeg ville foreslå dig at lave det om til Int værdier i stedet for, så du anvender 1 og 0 i stedet for noget tekst baseret. Er meget bedre at validere felterne med int værdier...

/Lasse
Avatar billede Slettet bruger
04. februar 2007 - 14:42 #18
Problemet er løst! I den sidste SQL-sætning var '' undladt omkring true. Da disse blev indsat virker sætning perfekt.

"SELECT COUNT(*) as aktiv FROM opskrifter WHERE aktiv='true'"
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester