Avatar billede dm013 Nybegynder
10. maj 2002 - 15:33 Der er 22 kommentarer og
2 løsninger

fejl i sql-sætning(er)

jeg har følgende sql kald som fejler, og har brug for hjælp til at løse dem

1. String sqlStreng= "SELECT Max(PaaroerendeID) AS highid FROM Paaroerende";
fejlmeddelelse:
SQLException4: [Microsoft][ODBC Driver Manager] Markørtilstanden er ugyldig.

2.
String sqlString = "INSERT INTO Paaroerende VALUES (" +p aaroerende.getPaaroerendeid() + ",'" + paaroerende.getNavn() + ",'" + paaroerende.getAdresse() + "'," + paaroerende.getCprnr() + ",'" + paaroerende.getPostnr() + ",'" + paaroerende.getBy() + ",'" + paaroerende.getTelefonpriv() + ",'" + paaroerende.getTelefonarb() + ",'" + paaroerende.getMobil() + ",'" + paaroerende.getEmail() + ",'" + paaroerende.getBemaerkninger() + ",'" + paaroerende.getTilstand() + ",'" + ")";

fejlmeddelelse:
SQLException3: [Microsoft][ODBC Microsoft Access-driver] Der er en syntaksfejl, fordi der mangler en operator. i forespørgselsudtrykket "'Gurli Risgnasker,'elmelunden 4',1505517676,'9620"
Avatar billede lyhr007 Nybegynder
10. maj 2002 - 15:39 #1
Hvilke coloums har din Paaroerende tabel?

Kan du poste den kode der står rundt om den første.
Avatar billede dm013 Nybegynder
10. maj 2002 - 15:44 #2
koden til 1:

//hent højeste paaroerendeid værdi i databasen og læg en til
public int getnextpaaroerendeid()
{
int id=4;
boolean sessionAabnetLokalt = false;// Er sessionen åbnet i denne metode
        if (!sessionIgang)
    {   
    aabnSession();
    sessionAabnetLokalt = true;
    }
   
String sqlStreng= "SELECT Max(PaaroerendeID) AS highid FROM Paaroerende";
   
try
{
ResultSet rs = stmt.executeQuery(sqlStreng); //udfør forespørgsel
id = rs.getInt("highid");
}
   
    catch(SQLException e)
    {
          System.err.println("SQLException4: " + e.getMessage());
    }
         

    if (sessionAabnetLokalt)        // Hvis sessionen er åbnet i denne metode
        lukSession();    // skal denne også lukkes af metoden
   
    return (id+1);
    }
Avatar billede dm013 Nybegynder
10. maj 2002 - 15:46 #3
paaroerende har følgende coloums:
paaroerendeid, navn, adresse, cprnr, postnr, by, telefonpriv, telefonarb, emailarb, bemaerkninger og tilstand
Avatar billede lyhr007 Nybegynder
10. maj 2002 - 15:53 #4
Husk at Java er Case-Sensitive der er forskel på store og små bogstaver.

Virker: "SELECT max(paaroerendeid) AS highid FROM paaroerende" hvis du bare skriver den i Access ? (Access er jo ikke 100% SQL kompatible).



"INSERT INTO Paaroerende VALUES (aaroerende.getPaaroerendeid() + ",'" + paaroerende.getNavn() + "','" + paaroerende.getAdresse() + "','" + paaroerende.getCprnr() + "','" + paaroerende.getPostnr() + "','" + paaroerende.getBy() + "','" + paaroerende.getTelefonpriv() + "','" + paaroerende.getTelefonarb() + "','" + paaroerende.getMobil() + "','" + paaroerende.getEmail() + "','" + paaroerende.getBemaerkninger() + "','" + paaroerende.getTilstand() + "'");
Avatar billede dm013 Nybegynder
10. maj 2002 - 16:01 #5
Sql fra access:
SELECT Max(Paaroerende.PaaroerendeID) AS highid
FROM Paaroerende;
Avatar billede lyhr007 Nybegynder
10. maj 2002 - 16:09 #6
Hvilken type data er PaaroerendeID skriv nogen eksempler på hvad der står i den?

Hvis du i access lader feltet være auto-increment, vil den automatisk ligge 1 til når den bliver indsat i din database (og herved slipper du for at hente den største værdi ud og ligge 1 til.
Avatar billede dm013 Nybegynder
10. maj 2002 - 16:14 #7
Paaroerendeid er sat til tal, vi ville gerne bruge autonummerering, men vi er ikke klar over hvordan vi skal håndterer dette, når vi i brugerfladen vil oprette f.eks en paaroerende, kan vi jo ikke "smide" et paaroerendeid med ned til access.
Avatar billede lyhr007 Nybegynder
10. maj 2002 - 16:15 #8
bare send '' med, så finder access selv ud af at finde det højeste og ligger så 1 til. Altså hvis der er sat autonummering til.

"INSERT INTO Paaroerende VALUES ("'','" + paaroerende.getNavn() + "','" + paaroerende.getAdresse() + "','" + paaroerende.getCprnr() + "','" + paaroerende.getPostnr() + "','" + paaroerende.getBy() + "','" + paaroerende.getTelefonpriv() + "','" + paaroerende.getTelefonarb() + "','" + paaroerende.getMobil() + "','" + paaroerende.getEmail() + "','" + paaroerende.getBemaerkninger() + "','" + paaroerende.getTilstand() + "'");
Avatar billede dm013 Nybegynder
10. maj 2002 - 16:24 #9
jeg kan ikke få den kode du poster til at virke.
Avatar billede dm013 Nybegynder
10. maj 2002 - 16:26 #10
sådan så kkoden oprindeligt ud:
String sqlString ="INSERT INTO Paaroerende VALUES (" + paaroerende.getPaaroerendeid() + "','" + paaroerende.getNavn() + ",'" + paaroerende.getAdresse() + "'," + paaroerende.getCprnr() + ",'" + paaroerende.getPostnr() + ",'" + paaroerende.getBy() + ",'" + paaroerende.getTelefonpriv() + ",'" + paaroerende.getTelefonarb() + ",'" + paaroerende.getMobil() + ",'" + paaroerende.getEmail() + ",'" + paaroerende.getBemaerkninger() + "','" + paaroerende.getTilstand() + "','" + ")";
Avatar billede lyhr007 Nybegynder
10. maj 2002 - 16:33 #11
String sqlString ="INSERT INTO Paaroerende VALUES (" + paaroerende.getPaaroerendeid() + "','" + paaroerende.getNavn() + ",'" + paaroerende.getAdresse() + "'," + paaroerende.getCprnr() + ",'" + paaroerende.getPostnr() + ",'" + paaroerende.getBy() + ",'" + paaroerende.getTelefonpriv() + ",'" + paaroerende.getTelefonarb() + ",'" + paaroerende.getMobil() + ",'" + paaroerende.getEmail() + ",'" + paaroerende.getBemaerkninger() + "','" + paaroerende.getTilstand() + "','" + ")";

hvis vi nu siger at alle dine java get er String'en polse, så vil der stå:

String sqlString ="INSERT INTO Paaroerende VALUES (polse','polse,'polse',polse,'polse,'polse,'polse,'polse,'polse,'polse,'polse','polse',')";

Der skulle gerne stå:

String sqlString = "INSERT INTO Paaroerende VALUES ('polse','polse','polse','polse,'polse','polse','polse','polse','polse','polse','polse','polse')";

Derfor skal den se sådan her ud med java:

String sqlString ="INSERT INTO Paaroerende VALUES (" + paaroerende.getPaaroerendeid() + ",'" + paaroerende.getNavn() + "','" + paaroerende.getAdresse() + "','" + paaroerende.getCprnr() + "','" + paaroerende.getPostnr() + "','" + paaroerende.getBy() + "','" + paaroerende.getTelefonpriv() + "','" + paaroerende.getTelefonarb() + "','" + paaroerende.getMobil() + "','" + paaroerende.getEmail() + "','" + paaroerende.getBemaerkninger() + "','" + paaroerende.getTilstand() + "')";
Avatar billede dm013 Nybegynder
10. maj 2002 - 16:45 #12
hvis jeg nu laver paaroerendeid om til autonummerering i access, skal den så se ud som dette:
String sqlString ="INSERT INTO Paaroerende VALUES("'','"  + paaroerende.getNavn() + "','" + paaroerende.getAdresse() + "','" + paaroerende.getCprnr() + "','" + paaroerende.getPostnr() + "','" + paaroerende.getBy() + "','" + paaroerende.getTelefonpriv() + "','" + paaroerende.getTelefonarb() + "','" + paaroerende.getMobil() + "','" + paaroerende.getEmail() + "','" + paaroerende.getBemaerkninger() + "','" + paaroerende.getTilstand() + "')"; ???
Avatar billede lyhr007 Nybegynder
10. maj 2002 - 16:52 #13
ja umidlbart ser det rigtigt ud.

kan du ikke prøve at System.out det og så copy/paste det over i Access og se om den æder det?
Avatar billede dm013 Nybegynder
10. maj 2002 - 17:00 #14
jeg har lavet syste.out på den, den bliver oprettet i java, men aldrig sendt til databasen.
Avatar billede lyhr007 Nybegynder
10. maj 2002 - 17:04 #15
Enten skal den virke ellers skal den kaste en exception!

hvad sker der hvis du copy/paste det fra system.out ind i access og kører det?
Avatar billede dm013 Nybegynder
10. maj 2002 - 17:10 #16
ikke forstået, kopiere det jeg får i system out ind i access ???
jeg får stadig SQLException4: [Microsoft][ODBC Driver Manager] Markørtilstanden er ugyldig. den relaterer til     String sqlStreng= "SELECT Max(Paaroerende.Paaroerendeid) AS highid FROM Paaroerende";
Avatar billede lyhr007 Nybegynder
10. maj 2002 - 17:13 #17
ok men virker din insert ?? sætter den data ind i access databasen??


Og blev vi ikke enige om at lave auto-increment på den så vi ikke skulle bruge "SELECT Max(PaaroerendeID) AS highid FROM Paaroerende"


???
Avatar billede dm013 Nybegynder
10. maj 2002 - 17:57 #18
jeg kan ikke få det til at fungere med auto-increment, jeg har prøvet med følgende kode:
String sqlString ="INSERT INTO Paaroerende VALUES("
+ paaroerende.getNavn() + "','" + paaroerende.getAdresse()
+ "','" + paaroerende.getCprnr() + "','" + paaroerende.getPostnr()
+ "','" + paaroerende.getBy() + "','" + paaroerende.getTelefonpriv()
+ "','" + paaroerende.getTelefonarb() + "','" + paaroerende.getMobil()
+ "','" + paaroerende.getEmail() + "','" + paaroerende.getBemaerkninger()
+ "','" + paaroerende.getTilstand() + "')";
men jeg får følgende fejlmeddelelse:
SQLException3: [Microsoft][ODBC Microsoft Access-driver] Der er en syntaksfejl, fordi der mangler en operator. i forespørgselsudtrykket "Gurli Riber','elmelundsvej 4','1501717676','5200','odense V','0','0','0','','','hyperaktiv')".
er vi tilbage ved (polse', 'polse')??
Avatar billede lyhr007 Nybegynder
10. maj 2002 - 18:03 #19
ja...



String sqlString ="INSERT INTO Paaroerende VALUES('', "
+ paaroerende.getNavn() + "','" + paaroerende.getAdresse()
+ "','" + paaroerende.getCprnr() + "','" + paaroerende.getPostnr()
+ "','" + paaroerende.getBy() + "','" + paaroerende.getTelefonpriv()
+ "','" + paaroerende.getTelefonarb() + "','" + paaroerende.getMobil()
+ "','" + paaroerende.getEmail() + "','" + paaroerende.getBemaerkninger()
+ "','" + paaroerende.getTilstand() + "')";

marker alt dette øverste(med musen, så det bliver mørkt), højre klik med musen og vælg (kopier) find dit java og sæt markøren højre klik med musen og tryk sæt ind.

Det er ikke 100% sikkert at det viker da access ikke er 100% SQL kompatible, men ellers finder vi på noget andet.
Avatar billede dm013 Nybegynder
10. maj 2002 - 18:10 #20
efter copu/paste får jeg denne:
SQLException3: [Microsoft][ODBC Microsoft Access-driver] Der er en syntaksfejl, fordi der mangler en operator. i forespørgselsudtrykket "('',Gurli Riber','elmelundsvej 4','1501717676','5200','odense V','0','0','0','','','hyperaktiv')".
Avatar billede dm013 Nybegynder
10. maj 2002 - 18:11 #21
hvis du er villig til det, kan jeg sende hele molevitten incl database ?
Avatar billede lyhr007 Nybegynder
10. maj 2002 - 18:13 #22
Det ser ud til at der mangler et mellemrum efter VALUES og til parentensen, ikke sikkert det gør noget...men prøv lige at sætte et ind.
Avatar billede lyhr007 Nybegynder
10. maj 2002 - 18:14 #23
jeg har ikke ODBC til access og det sat op :(
Avatar billede dm013 Nybegynder
10. maj 2002 - 19:02 #24
løsning:
String sqlString ="INSERT INTO Paaroerende(Navn,Adresse,......) VALUES (paaroerende.getNavn(),paaroerende.getAdresse() )
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
Kurser inden for grundlæggende programmering

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