Avatar billede x-pander Nybegynder
01. marts 2007 - 17:27 Der er 14 kommentarer og
1 løsning

Skal jeg bruge count her?

Daaaavs.

Sidder (stadigvæk) og bøvler med et forum. Jeg skal nu til det punkt hvor folk kan skrive indlæg i databasen og jeg skal have talt en kolonne op så jeg finder det højeste tal i den og så lægge en til.

Så altså:

Lige nu er jeg på teststadiet hvor der ligger 11 posts i min db og det sidste tal altså er 11, jeg skal have talt op så jeg finder det højeste tal og ligge en til, så det kan blive gemt i db'en igen, hvis man vælger at oprette et nyt, istedet for at oprette et til.

Sproget jeg benytter er btw. VB.NET
Avatar billede moller2567 Nybegynder
01. marts 2007 - 17:57 #1
Select MAX(kolonnenavn) + 1 AS HoejesteTalPlusEn
From tabelnavn

Men hvis jeg har forstået det, du spørger om rigtigt, er det så ikke nemmere, at lave en ID-kolonne med "identity" på 1. Den fyldes automatisk ud, når du indsætter en post, og du kan selv bestemme, om tallet skal stige med 1, 2, 3 .....
Avatar billede x-pander Nybegynder
02. marts 2007 - 10:04 #2
Jeg har allerede en ID-kolonne der er autonummereret, men det er ikke den kolonne der skal tælle op. Jeg prøver lige det der så.
Avatar billede x-pander Nybegynder
02. marts 2007 - 10:06 #3
Jeg forstår bare ikke helt den der AS HoejesteTalPlusEn
Avatar billede moller2567 Nybegynder
02. marts 2007 - 10:23 #4
Det er bare for at give en navn til kolonnen i svartabellen. Du kan bare udelade det, så vil kolonnenavnet være noget med MAX(Kolonnenavn). Ved at bruge et alias (AS HoejesteAntalPlusEN) giver jeg kolonnen et navn, som jeg bestemmer. AS "AliasNavn" kan du altid bruge også typisk på en SELECT over flere tabeller, hvor der kan være kolonner, der hedder det samme. Så kan du ved hjælp af AS "AliasNavn" omdøbe den ene i svartabellen.
Avatar billede x-pander Nybegynder
02. marts 2007 - 10:27 #5
Okaaay. Det var da ikke helt dumt egentlig. Det vil jeg lige prøve i der her forholdsvis simple eksempel inden det bliver for avanceret.
Avatar billede x-pander Nybegynder
02. marts 2007 - 12:35 #6
Function GetPostID() As DataTable

        Dim objData As New DataAccess

        Return objData.GetDataAccess("SELECT MAX (fldPostID) + 1 FROM tblHotline")
    End Function

Jeg får at vide at en tabel der med sikkerhed eksisterer ikke findes i Dataset'et. :/

strSQL = CInt(objDataAcc.GetPostID.Rows(0).Item("fldPostID"))
Avatar billede moller2567 Nybegynder
02. marts 2007 - 13:08 #7
Nu er vi ved at være ud af SQL-verdnen.

Har du prøvet at køre din sql fra Query-analyzeren, for at tjekke om du får det rigtige ud?, eller kan det skyldes noget med rettigheder på tabellen.

vb er ikke mit yndlingsspil, men det kan måske også være den måde, du tilgår data på.

I C# ville jeg måske tilgå data således:

Først hent data ind i et dataset "MitDataSet"

foreach (DataRow drMinDataRow in MitDataSet.Tables[0].Rows)
{
  int tal = int.parse(drMinDataRow["kolonnenavn"].ToString());
}
Duer selvfølgelig kun, hvis der erturneres nøjqagtig en post, men det gør der, hvis ellers tabellen er tilgængelig.

Så måske skal det være noget med strSQL = CInt(objDataAcc.GetPostID.Tables[0].Rows(0).Item("fldPostID"))
Avatar billede x-pander Nybegynder
05. marts 2007 - 08:30 #8
Hmm neeej, har heller aldrig set Tables(0) før og det virkede ikke.

Men altså selve koden er somend fin nok, det er bare SQL-sætningen der er fejl i:

SELECT MAX (fldPostID) AS 'PostIdentification' + 1 FROM tblHotline

Jeg opretter først en funktion ovre i business-laget og så kalder den i min code behind, fejlen er denne:

The SELECT statement includes a reserved word or an argument name that is misspelled or missing, or the punctuation is incorrect.

Så det virker somom den sætning ikke er korrekt.
Avatar billede moller2567 Nybegynder
05. marts 2007 - 09:37 #9
Med den fejlmeddelse, så har det intet med din vb kode, at gøre. Det er enten en syntaksfejl, stavefejl som f.eks. "sleect" i stedet for select, eller at du har brugt et reserveret ord. F.eks. kalder en variabel for "if"

Prøv at køre sql-sætningen fra SQL Query analyzeren. Så kan du forsøge, indtil, du får det til at virke.

Jeg tror, at det skyldes at du skal flytte dit +1 til før AS, så der i stedet står:

SELECT MAX (fldPostID) + 1 AS PostIdentification FROM tblHotline

Og ellers så ville jeg prøve følgende, for at se om det hjælper:

SELECT fldPostID FROM tblHotline
SELECT MAX(fldPostID) FROM tblHotline
SELECT MAX (fldPostID) AS PostIdentification FROM tblHotline
SELECT MAX (fldPostID) + 1 AS PostIdentification' FROM tblHotline

Så kan du se, hvornår fejlen opstår


Det er altid en god ting, at få sql'en til at virke, før du bruger den fra dit programmeringsværktøj.
Avatar billede x-pander Nybegynder
05. marts 2007 - 10:39 #10
Hej igen. Træls, havde desværre skrevet en lang besked, men den gik åbenbart tabt og blev ikke posted, men nu er fejlen måske fundet.

Som jeg skrev tidligere så er det som jeg regnede med, SQL-sætningen og ikke koden det var galt med.
Jeg prøvede systematisk som du skrev og kom til SELECT MAX(fldPostID) FROM tblHotline og der går det galt. Den siger: Column 'fldPostID' does not belong to table Table.
Avatar billede moller2567 Nybegynder
05. marts 2007 - 11:02 #11
Det betyder jo, at kolonnen flpPostID ikke findes i tabellen, eller er stavet forkert.
Avatar billede x-pander Nybegynder
05. marts 2007 - 11:12 #12
Ja nemlig, men den findes i tblHotline og den er copy/pasted rundt i koden, så navnet ikke kan være forkert.

Men altså, det kan jo kun være mig der har lavet en fejl. :/ Må bare løbe det igennem igen.
Avatar billede x-pander Nybegynder
05. marts 2007 - 11:23 #13
Ahhhhhh! Det nederste post:
http://www.dmxzone.com/forum/topic.asp?topic_id=32095

Idét du kalder AS klausulet, skal du ikke referere til feltet ved sit oprindelige navn mere, men ved det nye.
Avatar billede x-pander Nybegynder
05. marts 2007 - 12:18 #14
Det var både det og så at der ikke må komme ' rundt om det nye navn efter AS klausulet.
Avatar billede x-pander Nybegynder
05. marts 2007 - 13:40 #15
Og nu melder den korrekt værdi; 16. Den færdige sætning blev altså:

SELECT MAX(fldPostID) + 1 AS newPI FROM tblHotline

Så jeg siger mange tak for hjælpen :)
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
Computerworld tilbyder specialiserede kurser i database-management

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