Autor Beitrag
Schäl Guevera
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mi 03.11.04 09:12 
Hy!

Ich probiere gerade mit einem WebService rum - der Service (get_Kunden() lieferte mir auch immer hübsch den Inhalt er Tabelle Kunden zurück.
Nun versuche ich über die Parameter des Services die Suche einzugrenzen - mit der Kundennummer klappt es auch, nur wenn ich versuche nach einem Namen einzugrenzen ...
Wenn ich dieses tue - dann erscheint folgende Fehlermeldung:
Zitat:

System.ArgumentException: '' kann nicht zu 'System.Int32' konvertiert werden.
Parametername: type ---> System.FormatException: Die Eingabezeichenfolge hat das falsche Format.
at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
at System.String.System.IConvertible.ToInt32(IFormatProvider provider)
at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
at System.Web.Services.Protocols.ScalarFormatter.FromString(String value, Type type)
--- Ende der internen Ausnahmestapelüberwachung ---
at System.Web.Services.Protocols.ScalarFormatter.FromString(String value, Type type)
at System.Web.Services.Protocols.ValueCollectionParameterReader.Read(NameValueCollection collection)
at System.Web.Services.Protocols.HtmlFormParameterReader.Read(HttpRequest request)
at System.Web.Services.Protocols.HttpServerProtocol.ReadParameters()
at System.Web.Services.Protocols.WebServiceHandler.Invoke()
at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()

Was soll mir denn das sagen? Irgendwie habe ich da ein Brett vor dem Kopf! :(

Anbei der Code von get_Kunden():
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
function TWebService1.getKunden(KN_Nr:Integer; Name,Vorname,PLZ,Ort,Telefon:String) :DataSet;
var
  connstr  :  string;
  conn    :  OleDbConnection;
  cmdSel  :  OleDbCommand;
  da      :  OleDbDataAdapter;
  ds      :  DataSet;
  sql      :  string;
begin
  connstr:= 'Provider=ASAProv;'+
            'Data Source =Genesis;';
  conn:= OleDbConnection.Create(connstr);

  sql := 'SELECT * FROM Perso_Haupt WHERE 1=1';
  if KN_Nr <> 0 then
    sql := sql+ ' AND   Person_NR = '+KN_Nr.ToString;
  if Name <> '' then
    sql := sql+' AND Name = ' + Name;
  if Vorname <> '' then
    sql := sql+' AND Vorname = ?';
  if PLZ <> '' then
    sql := sql+' AND PLZ = ?';
  if Ort <> '' then
    sql := sql+' AND Ort = ?';
  if Telefon <> '' then
    sql := sql+' AND Telefon = ?';
  sql:= sql+' ORDER BY Person_NR';

  cmdsel:=OleDbCommand.Create(sql,conn);

  da:= OleDbDataAdapter.Create(cmdsel);
  ds:= DataSet.Create;
  conn.Open;
  da.Fill(ds);
  conn.Close;
  Result:= ds;
end;

Wie bekomme ich denn den Namen da rein? in D6 gab es doch quotedstring o.ä.
sakura
ontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 137

W2KS, W2K3S
D1Pr, D3Pr, D4Pr, D5E, D7A, D8A, D2005A
BeitragVerfasst: Mi 03.11.04 13:42 
Hi,

Zitat:
System.ArgumentException: '' kann nicht zu 'System.Int32' konvertiert werden.
Parametername: type ---> System.FormatException: Die Eingabezeichenfolge hat das falsche Format.
at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
[...]


sagt aus, dass es versucht einen leeren String in eine Zahl umzuwandeln -> schlägt natürlich fehl.

Folgender Code definiert bis zu drei Variablen in Deiner SQL-Abfrage
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  if Vorname <> '' then
    sql := sql+' AND Vorname = ?';
  if PLZ <> '' then
    sql := sql+' AND PLZ = ?';
  if Ort <> '' then
    sql := sql+' AND Ort = ?';
  if Telefon <> '' then
    sql := sql+' AND Telefon = ?';


Die Zuweisung geht wie folgend (odere ähnlich):conn.Parameters.Add('@Vorname', OdbcType.Int).Value := Vorname;

_________________
Das Lächeln ist die eleganteste Art dem Gegner die Zähne zu zeigen.
Borland SE
Schäl Guevera Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mi 03.11.04 15:33 
Thx! Hmm - so ähnlich hätte ich mir das auch gedacht ... finde aber bei allem Basteln keine Lösung bisher.

Die Suche nach der Kunden Nummer liefert das richtige Ergebniss - Alle anderen Suchen liefern immer den kompletten Inhalt der Kunden Tabelle. Irgendwie scheinen da die Bedingungen nicht gesetzt zu werden ...