Avatar billede kobojt Nybegynder
02. marts 2000 - 10:18 Der er 10 kommentarer og
2 løsninger

Stadig problemer med DB

Jeg får denne runtime fejl når jeg forsøger at indsætte i min DB.

[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.

Jeg skal have det her kode til at virke idag, er der nogen der kan hjælpe ?

try
{
  boolean space = false;
  String nr = CardPanel.list.getSelectedItem();
  StringBuffer buffer = new StringBuffer(20);
  int i,j;
  for(i = 0,j = 1;!space;i++,j++)
  {       
  if(!nr.substring(i,j).equals(" "))
  { 
    buffer.insert(i,nr.substring(i,j));
  }
  if(nr.substring(i,j).equals(" "))
  { 
    space = true;
  }
}
nr = buffer.toString();
System.out.println(nr + " " + buffer.length());// skal væk senere
//opret forbindelse
Connection con = DriverManager.getConnection("jdbc:odbc:Rep");
Statement stmt = con.createStatement();           
String query = "SELECT * FROM Kunder WHERE KundeNr LIKE nr";
ResultSet rs = stmt.executeQuery(query);
int k = rs.getInt("KundeNr");
String f = rs.getString("Firmanavn");
String a = rs.getString("Adresse");
int p = rs.getInt("PostNr");
String b = rs.getString("Bynavn");
String t = rs.getString("Telefon");
String tf = rs.getString("Telefax");
String kp = rs.getString("KontaktPers");
String d = rs.getString("Dtlf");
String e = rs.getString("Email");
String w = rs.getString("WWW");
CardPanel.tfKundeNr.setText(Integer.toString(k));
CardPanel.tfFrmNvn.setText(f);
CardPanel.tfAdr.setText(a);
CardPanel.tfPstNr.setText(Integer.toString(p)); 
CardPanel.tfByNavn.setText(b);
CardPanel.tfTlfNr.setText(t); 
CardPanel.tfTlfaxNr.setText(tf); 
CardPanel.tfKntPers.setText(kp);
CardPanel.tfDirTlf.setText(d);
CardPanel.tfEmail.setText(e);
CardPanel.tfwww.setText(w);
}
catch(SQLException se)
{
  System.err.println("Kunden blev ikke hentet.");
  System.out.println(se);
  System.exit(2);
}

Kobojt
Avatar billede jhh Nybegynder
02. marts 2000 - 13:51 #1
Jeg kan ikke se at du indsætter noget?

Til gengæld er der noget galt med din SELECT:
String query = "SELECT * FROM Kunder WHERE KundeNr LIKE nr";

Burde være:
String query = "SELECT * FROM Kunder WHERE KundeNr LIKE " + nr;

Der er tit en god ide at lave en System.out.println(query) så kan du se hvordan din SELECT ser ud og evt. prøve at køre den direkte i Access.

/Jesper
Avatar billede kobojt Nybegynder
02. marts 2000 - 14:08 #2
Hmm, det giver en ny fejl:

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'KundeNr LIKE'.

Så det kan ikke være rigtigt ?

Kobojt
Avatar billede jhh Nybegynder
02. marts 2000 - 14:24 #3
Jeg tror det er et Access kursus du efterspørger:

String query = "SELECT * FROM Kunder WHERE [Kunder.KundeNr] LIKE " + nr;

Som jeg skrev tidligere, så prøv at køre din query i Access i stedet for via JDBC. Hvis du ikke kan få query'en til at køre, så brug query-builder'en i Access som hjælp.

/Jesper
Avatar billede kobojt Nybegynder
02. marts 2000 - 15:27 #4
Min sql-sætning fejler intet, den kører fint i acces query-builder. Jeg har lært at bruge access, har du ?

Kobojt
Avatar billede jhh Nybegynder
02. marts 2000 - 15:38 #5
Undskyld jeg prøver at hjælpe.

Har du prøvet at skrive "query" ud på skærmen? Det lyder som om "nr" ikke indeholder det du regner med.

/Jesper
Avatar billede kobojt Nybegynder
02. marts 2000 - 16:59 #6
Ok ok, du lød bare meget negativ.
Det har jeg prøvet og det virkede fint. Jeg er sikker på at jeg fanger det rigtige.

Kobojt
Avatar billede jhh Nybegynder
02. marts 2000 - 17:20 #7
Hmmm, jeg er ved at være løbet tør for idéer. Skal du bruge LIKE? Hvis du bare slår op på et tal (kundenr) så kan du vel nøjes med at bruge '=', fx.

String query = "SELECT * FROM Kunder WHERE [KundeNr]=" + nr;

/Jesper
Avatar billede kobojt Nybegynder
03. marts 2000 - 08:00 #8
Du kunne godt lyde so om du har fat i noget. Det prøver jeg lige.

Kobojt
Avatar billede kobojt Nybegynder
03. marts 2000 - 08:22 #9
Hvis jeg gør som du foreslår får jeg denne runtimefejl:

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'KundeNr ='.

Jeg prøvede (...WHERE KundeNr = nr";), det resulterede i denne runtimefejl.

[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.

Vi må være tæt på at have været alle muligheder igennem. Du har ikke et sidste guldkorn til mig ?

Kobojt
Avatar billede jhh Nybegynder
03. marts 2000 - 12:58 #10
Tjaa, jeg ved snart ikke. Jeg har antaget at KundeNr er et tal - er kolonnen defineret som "Number"?

/Jesper
Avatar billede kobojt Nybegynder
05. marts 2000 - 10:28 #11
det har du også ret i, det samme er gældende for postnr.

Kobojt
Avatar billede cg Nybegynder
06. marts 2000 - 00:37 #12
Hmmm.

String query = "SELECT * FROM Kunder WHERE KundeNr LIKE nr";

Giver følgende SQL:
SELECT * FROM Kunder WHERE KundeNr LIKE nr

Altså "nr" og ikke indholdet af din variabel nr.

Det du nok er interesseret i er noget i retning af f.eks.

SELECT * FROM Kunder WHERE KundeNr = 7;

Det laver du ved at skrive:

String query = "SELECT * FROM Kunder WHERE KundeNr = " + nr + ";";

Læg mærke til det sidste ";", som ofte er nødvendigt.

Jeg kan kun tilslutte mig jhh - Skriv query ud på skærmen. Det har ihvertfald ikke virket med den kode du listede i første indlæg.

/Casper

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