Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
Delphi 12 Athens
|
Re: String bei Sql Abfrage zu lang
18. Apr 2007, 14:26
Das hilft auch nicht unbedingt was, ich vermute mal der Compiler meckert schon rum?
Delphi speichert die Strinkonstanten als ShortString ab und die dürfen maximal 255 Zeichen lang sein.
Du kannst aber die Strings auch aufteilen ... einfach mit +
Die erste Stringkonstante war über 260 Byte lang:
Code:
myquery1.sql.text := ('select distinct fabrikat,modell,fahrerhaus,radstand,gesamtgewicht,trommel,luftansaugung,achsformel,volumen,ausfuehrung from fabrikate,modelle,fahrerhaeuser,[color=#ff0000][b]'+'[/b][/color]radstaende,gg,trommeln,luftansaugungen,achsformeln,volumina,ausfuehrungen,bezeichnungen where fabrikate.f_id = '''+a+''') and (modelle.m_id = bezeichnungen.m_id and bezeichnungen.f_id = '''+a+''') and (fahrerhaeuser.fa_id = bezeichnungen.fa_id and bezeichnungen.f_id = '''+a+''') and (radstaende.r_id = bezeichnungen.r_id and bezeichnungen.f_id = '''+a+''') and (gg.g_id = bezeichnungen.g_id and bezeichnungen.f_id = '''+a+''') and (trommeln.t_id = bezeichnungen.t_id and bezeichnungen.f_id = '''+a+''') and (luftansaugungen.l_id = bezeichnungen.l_id and bezeichnungen.f_id = '''+a+''') and (achsformeln.ac_id = bezeichnungen.ac_id and bezeichnungen.f_id = '''+a+''') and (volumina.v_id = bezeichnungen.v_id and bezeichnungen.f_id = '''+a+''') and (ausfuehrungen.a_id = bezeichnungen.a_id and bezeichnungen.f_id = '''+a+''') ');
PS SQL kommt doch auch mit " als Stringgegrenzung klar?
Eventuell könntest du damit auch noch etwas lesbarer arbeiten ... weniger '.
myquery1.sql.text := ('select distinct fabrikat,modell,fahrerhaus,radstand,gesamtgewicht,trommel,luftansaugung,achsformel,volumen,ausfuehrung from fabrikate,modelle,fahrerhaeuser,'+'radstaende,gg,trommeln,luftansaugungen,achsformeln,volumina,ausfuehrungen,bezeichnungen where fabrikate.f_id = "'+a+'") and (modelle.m_id = bezeichnungen.m_id and bezeichnungen.f_id = "'+a+'") and (fahrerhaeuser.fa_id = bezeichnungen.fa_id and bezeichnungen.f_id = "'+a+'") and (radstaende.r_id = bezeichnungen.r_id and bezeichnungen.f_id = "'+a+'") and (gg.g_id = bezeichnungen.g_id and bezeichnungen.f_id = "'+a+'") and (trommeln.t_id = bezeichnungen.t_id and bezeichnungen.f_id = "'+a+'") and (luftansaugungen.l_id = bezeichnungen.l_id and bezeichnungen.f_id = "'+a+'") and (achsformeln.ac_id = bezeichnungen.ac_id and bezeichnungen.f_id = "'+a+'") and (volumina.v_id = bezeichnungen.v_id and bezeichnungen.f_id = "'+a+'") and (ausfuehrungen.a_id = bezeichnungen.a_id and bezeichnungen.f_id = "'+a+'")');
Und alles in einer Zeile ist auch nicht sonderlich übersichtlich.
Wenn du dir angewönst alles spätestens an 'ner bestimmten Stelle umzubrechen, dann würdest du auch nicht mehr an diese Grenze gelangen.
Delphi-Quellcode:
myquery1.sql.text := ('select distinct fabrikat,modell,fahrerhaus,radstand,gesamtgewicht,trommel,'
+'luftansaugung,achsformel,volumen,ausfuehrung from fabrikate,modelle,fahrerhaeuser,radstaende,'
+'gg,trommeln,luftansaugungen,achsformeln,volumina,ausfuehrungen,bezeichnungen where fabrikate.'
+'f_id = "'+a+'") and (modelle.m_id = bezeichnungen.m_id and bezeichnungen.f_id = "'+a+'") and '
+'(fahrerhaeuser.fa_id = bezeichnungen.fa_id and bezeichnungen.f_id = "'+a+'") and (radstaende.'
+'r_id = bezeichnungen.r_id and bezeichnungen.f_id = "'+a+'") and (gg.g_id = bezeichnungen.g_id '
+'and bezeichnungen.f_id = "'+a+'") and (trommeln.t_id = bezeichnungen.t_id and bezeichnungen.'
+'f_id = "'+a+'") and (luftansaugungen.l_id = bezeichnungen.l_id and bezeichnungen.f_id = "'+a
+'") and (achsformeln.ac_id = bezeichnungen.ac_id and bezeichnungen.f_id = "'+a+'") and ('
+'volumina.v_id = bezeichnungen.v_id and bezeichnungen.f_id = "'+a+'") and (ausfuehrungen.a_id '
+'= bezeichnungen.a_id and bezeichnungen.f_id = "'+a+'")');
$2B or not $2B
|