/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
MySql: Selectproblem
Fra : P.E. Nikolajsen


Dato : 01-01-09 11:41

Jeg har en tabel som giver mig et problem:

Når jeg henter alt inholdet i tabelen (SELECT * FROM ...) virker det som
forventet, men når jeg kun vil hente en enkelt record (SELECT * FROM ...
WHERE x = '1') kommer der intet retur. Det er ligegyldigt hvilken felter i
tabellen jeg søger på, resultatet er det samme.

Nogen bud på hvad problemet skyldes?

Poul Erik Nikolajsen


 
 
Steen Hansen (01-01-2009)
Kommentar
Fra : Steen Hansen


Dato : 01-01-09 16:05

On Thu, 1 Jan 2009 11:40:48 +0100, "P.E. Nikolajsen" <pen@akacia.dk>
wrote:

>Jeg har en tabel som giver mig et problem:
>
>Når jeg henter alt inholdet i tabelen (SELECT * FROM ...) virker det som
>forventet, men når jeg kun vil hente en enkelt record (SELECT * FROM ...
>WHERE x = '1') kommer der intet retur. Det er ligegyldigt hvilken felter i
>tabellen jeg søger på, resultatet er det samme.
>
>Nogen bud på hvad problemet skyldes?
>
>Poul Erik Nikolajsen

istedet for ... skriv navnet på tabellen

Steen

Arne Vajhøj (01-01-2009)
Kommentar
Fra : Arne Vajhøj


Dato : 01-01-09 16:46

P.E. Nikolajsen wrote:
> Jeg har en tabel som giver mig et problem:
>
> Når jeg henter alt inholdet i tabelen (SELECT * FROM ...) virker det som
> forventet, men når jeg kun vil hente en enkelt record (SELECT * FROM ...
> WHERE x = '1') kommer der intet retur. Det er ligegyldigt hvilken felter
> i tabellen jeg søger på, resultatet er det samme.
>
> Nogen bud på hvad problemet skyldes?

Hvis der er matchende værdier, så skal rækkerne
findes.

Check for fejl beskeder.

Og check at det ikke er et problem med f.eks. trailing spaces.

Arne

P.E. Nikolajsen (02-01-2009)
Kommentar
Fra : P.E. Nikolajsen


Dato : 02-01-09 20:52

"Arne Vajhøj" <arne@vajhoej.dk> skrev i meddelelsen
news:495ce52c$0$90269$14726298@news.sunsite.dk...
> P.E. Nikolajsen wrote:
>> Jeg har en tabel som giver mig et problem:
>>
>> Når jeg henter alt inholdet i tabelen (SELECT * FROM ...) virker det som
>> forventet, men når jeg kun vil hente en enkelt record (SELECT * FROM ...
>> WHERE x = '1') kommer der intet retur. Det er ligegyldigt hvilken felter
>> i tabellen jeg søger på, resultatet er det samme.
>>
>> Nogen bud på hvad problemet skyldes?
>
> Hvis der er matchende værdier, så skal rækkerne
> findes.
Enig, men det er det der ikke sker.

>
> Check for fejl beskeder.
Ingen.

>
> Og check at det ikke er et problem med f.eks. trailing spaces.
Ingen trailing spaces.

Søgning på tabellens numeriske værdi virker.
Søgninger tekst felter returnere ingen ting.


>
> Arne


Arne Vajhøj (03-01-2009)
Kommentar
Fra : Arne Vajhøj


Dato : 03-01-09 16:33

P.E. Nikolajsen wrote:
> "Arne Vajhøj" <arne@vajhoej.dk> skrev i meddelelsen
> news:495ce52c$0$90269$14726298@news.sunsite.dk...
>> P.E. Nikolajsen wrote:
>>> Jeg har en tabel som giver mig et problem:
>>>
>>> Når jeg henter alt inholdet i tabelen (SELECT * FROM ...) virker det
>>> som forventet, men når jeg kun vil hente en enkelt record (SELECT *
>>> FROM ... WHERE x = '1') kommer der intet retur. Det er ligegyldigt
>>> hvilken felter i tabellen jeg søger på, resultatet er det samme.
>>>
>>> Nogen bud på hvad problemet skyldes?
>>
>> Hvis der er matchende værdier, så skal rækkerne
>> findes.
> Enig, men det er det der ikke sker.
>
>>
>> Check for fejl beskeder.
> Ingen.
>
>>
>> Og check at det ikke er et problem med f.eks. trailing spaces.
> Ingen trailing spaces.
>
> Søgning på tabellens numeriske værdi virker.
> Søgninger tekst felter returnere ingen ting.

Det ville jo nok være blevet observeret af andre hvis en af
verdens mest bruge databaser ikke kunne sammenligne tekst strenge.

Kan du copy paste noget SQL/PHP/whatever ind som viser
hvad du gør - gerne med lidt info om tabel strukturen
og output.

Arne

P.E. Nikolajsen (04-01-2009)
Kommentar
Fra : P.E. Nikolajsen


Dato : 04-01-09 11:48


"Arne Vajhøj" <arne@vajhoej.dk> skrev i meddelelsen
news:495f852b$0$90265$14726298@news.sunsite.dk...
> P.E. Nikolajsen wrote:
>> "Arne Vajhøj" <arne@vajhoej.dk> skrev i meddelelsen
>> news:495ce52c$0$90269$14726298@news.sunsite.dk...
>>> P.E. Nikolajsen wrote:
>>>> Jeg har en tabel som giver mig et problem:
>>>>
>>>> Når jeg henter alt inholdet i tabelen (SELECT * FROM ...) virker det
>>>> som forventet, men når jeg kun vil hente en enkelt record (SELECT *
>>>> FROM ... WHERE x = '1') kommer der intet retur. Det er ligegyldigt
>>>> hvilken felter i tabellen jeg søger på, resultatet er det samme.
>>>>
>>>> Nogen bud på hvad problemet skyldes?
>>>
>>> Hvis der er matchende værdier, så skal rækkerne
>>> findes.
>> Enig, men det er det der ikke sker.
>>
>>>
>>> Check for fejl beskeder.
>> Ingen.
>>
>>>
>>> Og check at det ikke er et problem med f.eks. trailing spaces.
>> Ingen trailing spaces.
>>
>> Søgning på tabellens numeriske værdi virker.
>> Søgninger tekst felter returnere ingen ting.
>
> Det ville jo nok være blevet observeret af andre hvis en af
> verdens mest bruge databaser ikke kunne sammenligne tekst strenge.
>
> Kan du copy paste noget SQL/PHP/whatever ind som viser
> hvad du gør - gerne med lidt info om tabel strukturen
> og output.
>
> Arne

Tabellen er defineret således:

CREATE TABLE `sogne`
(
`Sogn_ID` integer (10) NOT NULL AUTO_INCREMENT ,
`Sogn` varchar (255),
`Herred` varchar (255),
`Amt` varchar (255),
PRIMARY KEY (`Sogn_ID`)
) TYPE=InnoDB CHARACTER SET latin1 COLLATE latin1_danish_ci

Dette virker

SELECT * FROM sogne WHERE sogn_id = '1'

og returner

1 Adslev Hjelmslev Skanderborg

Hvorimod

SELECT * FROM sogne WHERE sogn = 'Adslev'

intet returnere - det samme gør sig gældende hvis der søges på Herred og
Amt.

Jeg påstår ikke at det er en fejl i MySql. Jeg bruger MySql meget og laver
tilsvarende kald utallige steder, med fint resultat. Ergo må der være en
fejl i denne tabel, men hvilken?


Stig Johansen (04-01-2009)
Kommentar
Fra : Stig Johansen


Dato : 04-01-09 12:05

Jeg er ikke mySQL-haj, men du kan få nogle generelle betragtninger.

P.E. Nikolajsen wrote:
> Tabellen er defineret således:
>
> CREATE TABLE `sogne`
> (
> `Sogn_ID` integer (10) NOT NULL AUTO_INCREMENT ,
> `Sogn` varchar (255),
> `Herred` varchar (255),
> `Amt` varchar (255),
> PRIMARY KEY (`Sogn_ID`)

Hvorfor alle disse `-tegn ?

> Dette virker
> SELECT * FROM sogne WHERE sogn_id = '1'

Normalt bruger man ikke ' til tal, kun til strenge.

> SELECT * FROM sogne WHERE sogn = 'Adslev'

Som Arne er inde på, så er den generelle definition på
CHAR(10) karakteriseret ved, at den altid er 10 karakterer, hvor databasen
indsætter de nødvendige trailing spaces,
hvorimod
VARCHAR(10) er karaktiseret ved, at den kun indeholder de aktuelle
karakterer.

Tidligere inkarnationer af MSSQL havde den egenskab, at 'de' ikke kunne
kende forskel på CHAR(x) og VARCHAR(x), som har givet anledning til en 'del
bøvl'.

Prøv
WHERE sogn >= 'Adslev'
eller
WHERE sogn LIKE 'Ads%'

--
Med venlig hilsen
Stig Johansen

P.E. Nikolajsen (04-01-2009)
Kommentar
Fra : P.E. Nikolajsen


Dato : 04-01-09 12:45

> Jeg er ikke mySQL-haj, men du kan få nogle generelle betragtninger.
>
> P.E. Nikolajsen wrote:
>> Tabellen er defineret således:
>>
>> CREATE TABLE `sogne`
>> (
>> `Sogn_ID` integer (10) NOT NULL AUTO_INCREMENT ,
>> `Sogn` varchar (255),
>> `Herred` varchar (255),
>> `Amt` varchar (255),
>> PRIMARY KEY (`Sogn_ID`)
>
> Hvorfor alle disse `-tegn ?
>
>> Dette virker
>> SELECT * FROM sogne WHERE sogn_id = '1'
>
> Normalt bruger man ikke ' til tal, kun til strenge.
>
>> SELECT * FROM sogne WHERE sogn = 'Adslev'
>
> Som Arne er inde på, så er den generelle definition på
> CHAR(10) karakteriseret ved, at den altid er 10 karakterer, hvor databasen
> indsætter de nødvendige trailing spaces,
> hvorimod
> VARCHAR(10) er karaktiseret ved, at den kun indeholder de aktuelle
> karakterer.
>
> Tidligere inkarnationer af MSSQL havde den egenskab, at 'de' ikke kunne
> kende forskel på CHAR(x) og VARCHAR(x), som har givet anledning til en
> 'del
> bøvl'.
>
Der er tale MySql 5.0.45

> Prøv
> WHERE sogn >= 'Adslev'
> eller
> WHERE sogn LIKE 'Ads%'
>
Har prøvet begge dele uden resultat


Arne Vajhøj (04-01-2009)
Kommentar
Fra : Arne Vajhøj


Dato : 04-01-09 14:53

Stig Johansen wrote:
> Jeg er ikke mySQL-haj, men du kan få nogle generelle betragtninger.
>
> P.E. Nikolajsen wrote:
>> Tabellen er defineret således:
>>
>> CREATE TABLE `sogne`
>> (
>> `Sogn_ID` integer (10) NOT NULL AUTO_INCREMENT ,
>> `Sogn` varchar (255),
>> `Herred` varchar (255),
>> `Amt` varchar (255),
>> PRIMARY KEY (`Sogn_ID`)
>
> Hvorfor alle disse `-tegn ?

Det er en uskik som er ret almindelig i MySQL verdenen
også i tools der genererer SQL. De gør at man
kan bruge reserverede ord som navne og have navne med
mellemrum etc.. D.v.s. at `` i MySQL svarer til [] i
SQLServer.

>> Dette virker
>> SELECT * FROM sogne WHERE sogn_id = '1'
>
> Normalt bruger man ikke ' til tal, kun til strenge.

MySQL er mere tolerant med hensyn til den slags end
andre databaser. Det virker faktisk. Jeg ville aldrig
bruge dem.

Arne

Stig Johansen (04-01-2009)
Kommentar
Fra : Stig Johansen


Dato : 04-01-09 16:02

Arne Vajhøj wrote:

> D.v.s. at `` i MySQL svarer til [] i
> SQLServer.

Ok, så det er en form for vendor lockin ?
Hvorfor bruger man ikke " som, SVJH, er SQL Ansi standard (Jeg ved godt
hvorfor MS skiftede fra " til [] fra 6.5->7.0, men hvad er mySQL's
motivation)?

>>> SELECT * FROM sogne WHERE sogn_id = '1'
>>
>> Normalt bruger man ikke ' til tal, kun til strenge.
>
> MySQL er mere tolerant med hensyn til den slags end
> andre databaser. Det virker faktisk.

Jeg ved ikke om det er godt eller skidt.
Jeg er personligt ikke særlig glad for at 'databasen' skal fortolke mine
udtryk, med deraf følgende risiko for manglende præcision i data.

> Jeg ville aldrig
> bruge dem.

Ditto.

--
Med venlig hilsen
Stig Johansen

Arne Vajhøj (04-01-2009)
Kommentar
Fra : Arne Vajhøj


Dato : 04-01-09 16:19

Stig Johansen wrote:
> Arne Vajhøj wrote:
>> D.v.s. at `` i MySQL svarer til [] i
>> SQLServer.
>
> Ok, så det er en form for vendor lockin ?

Faktisk ja.

> Hvorfor bruger man ikke " som, SVJH, er SQL Ansi standard

Traditionelt har MySQL brugt "abc" som synonym for 'abc'.

Man kan enable ANSI_QUOTES option, men kompabilitet bla.bla..

>>>> SELECT * FROM sogne WHERE sogn_id = '1'
>>> Normalt bruger man ikke ' til tal, kun til strenge.
>> MySQL er mere tolerant med hensyn til den slags end
>> andre databaser. Det virker faktisk.
>
> Jeg ved ikke om det er godt eller skidt.
> Jeg er personligt ikke særlig glad for at 'databasen' skal fortolke mine
> udtryk, med deraf følgende risiko for manglende præcision i data.

Jeg synes at det er skidt.

Men sådan er det.

Arne

Lars Kongshøj (11-01-2009)
Kommentar
Fra : Lars Kongshøj


Dato : 11-01-09 13:52

Stig Johansen wrote:
> Hvorfor bruger man ikke " som, SVJH, er SQL Ansi standard (Jeg ved godt
> hvorfor MS skiftede fra " til [] fra 6.5->7.0, men hvad er mySQL's
> motivation)?

Hvorfor gjorde MS det?

--
Lars Kongshøj

Stig Johansen (11-01-2009)
Kommentar
Fra : Stig Johansen


Dato : 11-01-09 16:01

Lars Kongshøj wrote:

> Stig Johansen wrote:
>> Hvorfor bruger man ikke " som, SVJH, er SQL Ansi standard (Jeg ved godt
>> hvorfor MS skiftede fra " til [] fra 6.5->7.0, men hvad er mySQL's
>> motivation)?
>
> Hvorfor gjorde MS det?

Ved at indsylte alt muligt genereret SQL i [], sikrer man sig, at når der er
tilstrækkeligt meget af den slags i programmerne, er det (stort set)
umuligt at skifte database.

7.0 kunne godt håndtere standard "'er, men man skulle konfigurere det
manuelt, og det var disabled ved installation/upgrade 6.5->7.0

--
Med venlig hilsen
Stig Johansen

Arne Vajhøj (11-01-2009)
Kommentar
Fra : Arne Vajhøj


Dato : 11-01-09 16:38

Stig Johansen wrote:
> Lars Kongshøj wrote:
>> Stig Johansen wrote:
>>> Hvorfor bruger man ikke " som, SVJH, er SQL Ansi standard (Jeg ved godt
>>> hvorfor MS skiftede fra " til [] fra 6.5->7.0, men hvad er mySQL's
>>> motivation)?
>> Hvorfor gjorde MS det?
>
> Ved at indsylte alt muligt genereret SQL i [], sikrer man sig, at når der er
> tilstrækkeligt meget af den slags i programmerne, er det (stort set)
> umuligt at skifte database.

Har du en email fra Bill Gates der dokumenterer det ?

Siden du nu "ved" det og ikke bare "gætter" på det.

Arne

Stig Johansen (11-01-2009)
Kommentar
Fra : Stig Johansen


Dato : 11-01-09 21:50

Arne Vajhøj wrote:

> Har du en email fra Bill Gates der dokumenterer det ?
>
> Siden du nu "ved" det og ikke bare "gætter" på det.

He - ordkløver ?
Hvad skulle baggrunden ellers være ?

Jeg er pissesur på Bill over det nummer.
Der var en af mine kunder, der havde opgraderet sin MS SQLServer fra 6.5q ->
7.0 uden jeg vidste det.

Visse steder havde jeg brugt ", og det medførte, at mit program pludselig
gav database fejl.

Det kostede en tur - retur til Jylland, og adskillige timer inden jeg fandt
ud af hans lille 'narrestreg'.

Kunden havde ikke teknisk indsigt til at forstå qproblemet - "Det var jo mit
program der fejler".

Så jeg måtte selv æde transport, timer osv.

--
Med venlig hilsen
Stig Johansen

Arne Vajhøj (11-01-2009)
Kommentar
Fra : Arne Vajhøj


Dato : 11-01-09 22:15

Stig Johansen wrote:
> Arne Vajhøj wrote:
>> Har du en email fra Bill Gates der dokumenterer det ?
>>
>> Siden du nu "ved" det og ikke bare "gætter" på det.
>
> He - ordkløver ?
> Hvad skulle baggrunden ellers være ?

Tja - jeg forslog jo i en anden post, at det kunne være af
hensyn til MS Access kompabilitet.

Arne

Stig Johansen (12-01-2009)
Kommentar
Fra : Stig Johansen


Dato : 12-01-09 06:07

Arne Vajhøj wrote:

> Stig Johansen wrote:
>> Hvad skulle baggrunden ellers være ?
>
> Tja - jeg forslog jo i en anden post, at det kunne være af
> hensyn til MS Access kompabilitet.

Lad os se bort fra jeg brugte ordet 'ved' i stedet for 'tror jeg ved'.

Access var ikke særligt udbredt i virksomhederne.
Det var ikke en del af Office pakken, og skulle købes separat, til visnok
3-4.000 pr. bruger, så den blev kun brugt af de få indviede (super) brugere
til nogle hjemmestrikket fedtemadsprogrammer.

MS SQLServer var ikke deres eget produkt, men et køb/licens af Sybase.
Til og med 6.5 lignede den nok Sybase for meget i MS's smag.

Analogt med Internet Explorer med HTML og JScript, så 'bøjer man'
standarderne.

Brug af " til identifiers, og ' til literals er SVJV SQL ANSI Standard.

Man fjerner MAO bevidst understøttelse af standard til fordel for sin egen
'standard'.

Hvis man havde rent mel i posen, ville jeg tro man ville ændre Access til at
understøtte standard i stedet.

--
Med venlig hilsen
Stig Johansen

Arne Vajhøj (14-01-2009)
Kommentar
Fra : Arne Vajhøj


Dato : 14-01-09 03:51

Stig Johansen wrote:
> Arne Vajhøj wrote:
>> Stig Johansen wrote:
>>> Hvad skulle baggrunden ellers være ?
>> Tja - jeg forslog jo i en anden post, at det kunne være af
>> hensyn til MS Access kompabilitet.
>
> Lad os se bort fra jeg brugte ordet 'ved' i stedet for 'tror jeg ved'.
>
> Access var ikke særligt udbredt i virksomhederne.

Access var skam ret udbredt også dengang.

> Det var ikke en del af Office pakken, og skulle købes separat, til visnok
> 3-4.000 pr. bruger,

Bl.a. fordi den var en del af Office 95, 97 og 2000 i Professional
udgaven.

> så den blev kun brugt af de få indviede (super) brugere
> til nogle hjemmestrikket fedtemadsprogrammer.

De "hjemmestrikkede fedtemadsprogrammer" blev nogen gange så store
at det var nødvendigt at upsize dem til SQLServer.

> Brug af " til identifiers, og ' til literals er SVJV SQL ANSI Standard.

Det er korrekt.

> Man fjerner MAO bevidst understøttelse af standard til fordel for sin egen
> 'standard'.
>
> Hvis man havde rent mel i posen, ville jeg tro man ville ændre Access til at
> understøtte standard i stedet.

Eller man har lavet en business vurdering af at det var nemmere at lære
SQLServer DBA'ere at bruge SET QUOTED_IDENTIFIER ON end at lære Access
folkene at bruge "".

Arne

Stig Johansen (14-01-2009)
Kommentar
Fra : Stig Johansen


Dato : 14-01-09 05:31

Arne Vajhøj wrote:

> Stig Johansen wrote:
>> Access var ikke særligt udbredt i virksomhederne.
>
> Access var skam ret udbredt også dengang.

Jeg må hellere præcisere: "De virksomheder jeg lavede opgaver for".
Det var typisk store produktionsvirksomheder, der kørte deres operastionelle
systemer på en mini/main-frame platform.

Et typisk scenaria var, at økonomichefer/direktører sad med nogle 'monster'
regneark, Lotus 123 eller Excel, og ikke Access.

>> Det var ikke en del af Office pakken, og skulle købes separat, til visnok
>> 3-4.000 pr. bruger,
>
> Bl.a. fordi den var en del af Office 95, 97 og 2000 i Professional
> udgaven.

Jeg har været med i 'gamet' siden 1980, og årtal og versioner flyder lidt
ud.
På et tidspunkt blev Access en del af Officepakken, men jeg husker ikke
hvilken version.
Ydermere kører disse kunder på Select aftaler, som ikke nødvendigvis er
samme struktur som i detailhandel.

Med udbredt mener jeg også brugt, og ikke kun installeret.

>> så den blev kun brugt af de få indviede (super)
>> brugere
>> til nogle hjemmestrikket fedtemadsprogrammer.
>
> De "hjemmestrikkede fedtemadsprogrammer" blev nogen gange så store
> at det var nødvendigt at upsize dem til SQLServer.

Ikke i de virksomheder jeg kender.
Kritiske data ligger på 'det store jern', og MS SQLServer kommer ind i
billedet til små sidesystemer som Datawarehouse/BI systemer.

> Eller man har lavet en business vurdering af at det var nemmere at lære
> SQLServer DBA'ere at bruge SET QUOTED_IDENTIFIER ON end at lære Access
> folkene at bruge "".

Det tvivler jeg som sagt på, men enhver kan tro hvad man vil.

Baggrunden for at købe Sybase var for at komme in på databasemarkedet og
prøve at 'lege med de store'.

--
Med venlig hilsen
Stig Johansen

Arne Vajhøj (11-01-2009)
Kommentar
Fra : Arne Vajhøj


Dato : 11-01-09 16:40

Lars Kongshøj wrote:
> Stig Johansen wrote:
>> Hvorfor bruger man ikke " som, SVJH, er SQL Ansi standard (Jeg ved godt
>> hvorfor MS skiftede fra " til [] fra 6.5->7.0, men hvad er mySQL's
>> motivation)?
>
> Hvorfor gjorde MS det?

En mulig forklaring er er at MS Access (Jet) brugte [] og at
de gerne ville gøre det nemmere at skifte fra MS Access til
SQLServer.

Arne

Stig Johansen (11-01-2009)
Kommentar
Fra : Stig Johansen


Dato : 11-01-09 21:52

Arne Vajhøj wrote:

> En mulig forklaring er er at MS Access (Jet) brugte [] og at
> de gerne ville gøre det nemmere at skifte fra MS Access til
> SQLServer.

Hvis man holder sig fra 'mærkeliqe' navne, behøver hverken Access eller MS
SQLServer de der [].

og mySQL behøver heller ikke de der `

--
Med venlig hilsen
Stig Johansen

Arne Vajhøj (11-01-2009)
Kommentar
Fra : Arne Vajhøj


Dato : 11-01-09 22:18

Stig Johansen wrote:
> Arne Vajhøj wrote:
>> En mulig forklaring er er at MS Access (Jet) brugte [] og at
>> de gerne ville gøre det nemmere at skifte fra MS Access til
>> SQLServer.
>
> Hvis man holder sig fra 'mærkeliqe' navne, behøver hverken Access eller MS
> SQLServer de der [].
>
> og mySQL behøver heller ikke de der `

Det er vi helt enige om.

Desværre mangler vi at overbevise et par stykker.

Arne

PS: Det er ikke kun navne med mellemrum i (som jeg antager er
hvad du mener med "mærkelige"), men også brug af reserverede
ord som navne, det bruges til - men det ene er jo lige så slemt som
det andet.

Lars Kongshøj (12-01-2009)
Kommentar
Fra : Lars Kongshøj


Dato : 12-01-09 08:18

Arne Vajhøj wrote:
> En mulig forklaring er er at MS Access (Jet) brugte [] og at
> de gerne ville gøre det nemmere at skifte fra MS Access til
> SQLServer.

Det er da ingen begrundelse for at fjerne understøttelsen af standard.
Det er intet problem at have to skrivemåder for sammen leksem, det er
der masser af eksempler på.

--
Lars Kongshøj

Arne Vajhøj (14-01-2009)
Kommentar
Fra : Arne Vajhøj


Dato : 14-01-09 03:47

Lars Kongshøj wrote:
> Arne Vajhøj wrote:
>> En mulig forklaring er er at MS Access (Jet) brugte [] og at
>> de gerne ville gøre det nemmere at skifte fra MS Access til
>> SQLServer.
>
> Det er da ingen begrundelse for at fjerne understøttelsen af standard.
> Det er intet problem at have to skrivemåder for sammen leksem, det er
> der masser af eksempler på.

Der er den lille krølle at Access udover ikke at bruge "" omkring
navne faktisk bruger "" som string literal (ligesom '').

De to brug af "" er ikke kompatible.

Og SQLServer understøtter skam stadig "" omkring navne.

SET QUOTED_IDENTIFIER ON

eller den tilsvarende sp_dboption kan enable muligheden.

Arne



Arne Vajhøj (04-01-2009)
Kommentar
Fra : Arne Vajhøj


Dato : 04-01-09 14:55

P.E. Nikolajsen wrote:
> "Arne Vajhøj" <arne@vajhoej.dk> skrev i meddelelsen
>> Kan du copy paste noget SQL/PHP/whatever ind som viser
>> hvad du gør - gerne med lidt info om tabel strukturen
>> og output.
>
> Tabellen er defineret således:
>
> CREATE TABLE `sogne`
> (
> `Sogn_ID` integer (10) NOT NULL AUTO_INCREMENT ,
> `Sogn` varchar (255),
> `Herred` varchar (255),
> `Amt` varchar (255),
> PRIMARY KEY (`Sogn_ID`)
> ) TYPE=InnoDB CHARACTER SET latin1 COLLATE latin1_danish_ci
>
> Dette virker
>
> SELECT * FROM sogne WHERE sogn_id = '1'
>
> og returner
>
> 1 Adslev Hjelmslev Skanderborg
>
> Hvorimod
>
> SELECT * FROM sogne WHERE sogn = 'Adslev'
>
> intet returnere - det samme gør sig gældende hvis der søges på Herred og
> Amt.

Hvad viser:

SELECT CONCAT('#',sogn,'#'),CONCAT('#',herred,'#'),CONCAT('#',amt,'#')
FROM sogne WHERE sogn_id = 1

?

Arne

P.E. Nikolajsen (04-01-2009)
Kommentar
Fra : P.E. Nikolajsen


Dato : 04-01-09 20:17

Fejlen fundet:
Der VAR en blank karakter først i felterne, som jeg ikke kunne se.

Tak for hjælpen.

PE
"Arne Vajhøj" <arne@vajhoej.dk> skrev i meddelelsen
news:4960bfb1$0$90270$14726298@news.sunsite.dk...
> P.E. Nikolajsen wrote:
>> "Arne Vajhøj" <arne@vajhoej.dk> skrev i meddelelsen
>>> Kan du copy paste noget SQL/PHP/whatever ind som viser
>>> hvad du gør - gerne med lidt info om tabel strukturen
>>> og output.
>>
>> Tabellen er defineret således:
>>
>> CREATE TABLE `sogne`
>> (
>> `Sogn_ID` integer (10) NOT NULL AUTO_INCREMENT ,
>> `Sogn` varchar (255),
>> `Herred` varchar (255),
>> `Amt` varchar (255),
>> PRIMARY KEY (`Sogn_ID`)
>> ) TYPE=InnoDB CHARACTER SET latin1 COLLATE latin1_danish_ci
>>
>> Dette virker
>>
>> SELECT * FROM sogne WHERE sogn_id = '1'
>>
>> og returner
>>
>> 1 Adslev Hjelmslev Skanderborg
>>
>> Hvorimod
>>
>> SELECT * FROM sogne WHERE sogn = 'Adslev'
>>
>> intet returnere - det samme gør sig gældende hvis der søges på Herred og
>> Amt.
>
> Hvad viser:
>
> SELECT CONCAT('#',sogn,'#'),CONCAT('#',herred,'#'),CONCAT('#',amt,'#')
> FROM sogne WHERE sogn_id = 1
>
> ?
>
> Arne


Arne Vajhøj (04-01-2009)
Kommentar
Fra : Arne Vajhøj


Dato : 04-01-09 21:52

P.E. Nikolajsen wrote:
> "Arne Vajhøj" <arne@vajhoej.dk> skrev i meddelelsen
> news:4960bfb1$0$90270$14726298@news.sunsite.dk...
>> P.E. Nikolajsen wrote:
>>> "Arne Vajhøj" <arne@vajhoej.dk> skrev i meddelelsen
>>>> Kan du copy paste noget SQL/PHP/whatever ind som viser
>>>> hvad du gør - gerne med lidt info om tabel strukturen
>>>> og output.
>>>
>>> Tabellen er defineret således:
>>>
>>> CREATE TABLE `sogne`
>>> (
>>> `Sogn_ID` integer (10) NOT NULL AUTO_INCREMENT ,
>>> `Sogn` varchar (255),
>>> `Herred` varchar (255),
>>> `Amt` varchar (255),
>>> PRIMARY KEY (`Sogn_ID`)
>>> ) TYPE=InnoDB CHARACTER SET latin1 COLLATE latin1_danish_ci
>>>
>>> Dette virker
>>>
>>> SELECT * FROM sogne WHERE sogn_id = '1'
>>>
>>> og returner
>>>
>>> 1 Adslev Hjelmslev Skanderborg
>>>
>>> Hvorimod
>>>
>>> SELECT * FROM sogne WHERE sogn = 'Adslev'
>>>
>>> intet returnere - det samme gør sig gældende hvis der søges på Herred
>>> og Amt.
>>
>> Hvad viser:
>>
>> SELECT CONCAT('#',sogn,'#'),CONCAT('#',herred,'#'),CONCAT('#',amt,'#')
>> FROM sogne WHERE sogn_id = 1

> Fejlen fundet:
> Der VAR en blank karakter først i felterne, som jeg ikke kunne se.



Det er nemt at trimme felterne med:

UPDATE sogne SET sogn=TRIM(sogn),herred=TRIM(herred),amt=TRIM(amt)

Arne

P.E. Nikolajsen (05-01-2009)
Kommentar
Fra : P.E. Nikolajsen


Dato : 05-01-09 08:34


"Arne Vajhøj" <arne@vajhoej.dk> skrev i meddelelsen
news:4961217c$0$90270$14726298@news.sunsite.dk...
> P.E. Nikolajsen wrote:
>> "Arne Vajhøj" <arne@vajhoej.dk> skrev i meddelelsen
>> news:4960bfb1$0$90270$14726298@news.sunsite.dk...
>>> P.E. Nikolajsen wrote:
>>>> "Arne Vajhøj" <arne@vajhoej.dk> skrev i meddelelsen
>>>>> Kan du copy paste noget SQL/PHP/whatever ind som viser
>>>>> hvad du gør - gerne med lidt info om tabel strukturen
>>>>> og output.
>>>>
>>>> Tabellen er defineret således:
>>>>
>>>> CREATE TABLE `sogne`
>>>> (
>>>> `Sogn_ID` integer (10) NOT NULL AUTO_INCREMENT ,
>>>> `Sogn` varchar (255),
>>>> `Herred` varchar (255),
>>>> `Amt` varchar (255),
>>>> PRIMARY KEY (`Sogn_ID`)
>>>> ) TYPE=InnoDB CHARACTER SET latin1 COLLATE latin1_danish_ci
>>>>
>>>> Dette virker
>>>>
>>>> SELECT * FROM sogne WHERE sogn_id = '1'
>>>>
>>>> og returner
>>>>
>>>> 1 Adslev Hjelmslev Skanderborg
>>>>
>>>> Hvorimod
>>>>
>>>> SELECT * FROM sogne WHERE sogn = 'Adslev'
>>>>
>>>> intet returnere - det samme gør sig gældende hvis der søges på Herred
>>>> og Amt.
>>>
>>> Hvad viser:
>>>
>>> SELECT CONCAT('#',sogn,'#'),CONCAT('#',herred,'#'),CONCAT('#',amt,'#')
>>> FROM sogne WHERE sogn_id = 1
>
>> Fejlen fundet:
>> Der VAR en blank karakter først i felterne, som jeg ikke kunne se.
>
>
>
> Det er nemt at trimme felterne med:
>
> UPDATE sogne SET sogn=TRIM(sogn),herred=TRIM(herred),amt=TRIM(amt)
>
> Arne

Jeps, er gjort.

PE


Stig Johansen (05-01-2009)
Kommentar
Fra : Stig Johansen


Dato : 05-01-09 17:54

P.E. Nikolajsen wrote:

> "Arne Vajhøj" <arne@vajhoej.dk> skrev i meddelelsen
>> Det er nemt at trimme felterne med:
>>
>> UPDATE sogne SET sogn=TRIM(sogn),herred=TRIM(herred),amt=TRIM(amt)
>>
>> Arne
>
> Jeps, er gjort.

Bare lige et råd.
Find ud af hvordan felterne er blevet oprettet med leading spaces.
Og ret det dér.

--
Med venlig hilsen
Stig Johansen

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste