Vairāk

Vai, ievietojot jaunu rindu, izmantojat ST_Transform?


Esmu uzrakstījis skriptu, kas WGS84 nolasa CSV failu ar lat/lon koordinātām un ievieto tos PostGIS tabulā.

Tagad es vēlos mainīt ievietošanas vaicājumu, lai pārveidotu koordinātas no WGS84 uz citu atsauces sistēmu. Mans jautājums ir, vai, ievietojot datus, ir iespējams kaut kas līdzīgs šim.

Es mēģināju kaut ko līdzīgu, bet nedarbojas:

INSERT INTO imgRural (geom) VALUES (ST_Transform (ST_GeomFromText ('POINT (23.771111111111 38.013888888889)', 2100)), 2100) RETURNING imgId;

Ko man te trūkst?


Džons Barkasavā komentārā teica: es atstāju novārtā SRID iestatīšanu pirms pārveidošanas. Tas strādāja labi:

INSERT INTO imgRural (geom) VALUES (ST_Transform (ST_GeomFromText ('POINT (23.771111111111 38.013888888889)', 4326), 2100)) RETURNING imgId;

Neskatoties uz pašu failu, mans labākais minējums ir tāds, ka šūnas beigās ir atstarpes atstarpe, kurai ir piemērots minētais formatējums.

Ievietojot tabulā jaunu (-as) rindu (-as), InDesign kopē šūnas rindkopas un rakstzīmju stila iestatījumus (kopā ar jebkādām ignorācijām) uz jaunajām tai pašā kolonnā. Precīzāk, tas kopē iestatījumus pēdējā rakstzīme šūnā, vai tas būtu burts, atstarpes vai pat pārtraukuma rakstzīme.

Izvēlnē Tips atzīmējiet Rādīt slēptās rakstzīmes (tas atrodas apakšā) vai nospiediet CMD + ALT + I, ja izmantojat Mac, vai CTRL + ALT + I, ja izmantojat datoru. Pārbaudiet, vai šūnas beigās ir kāds simbols, līdzīgs tiem, kas parādīti zemāk esošajā ekrānuzņēmumā. Katras šūnas beigās vajadzētu būt tikai hash # simbolam, piemēram, attēla pirmajā šūnā. Ja blakus ir kaut kas cits (vai ja ir tikai simbols, kas nav #), visticamāk, rakstzīme, kas satur nevēlamu formatējumu, un pēc tam pāriet uz jaunām rindām.

Ja vēlaties, varat mēģināt to atlasīt un pārbaudīt, kuri ignorējumi tiek lietoti. Pretējā gadījumā varat vienkārši notīrīt ignorēšanas gadījumus. Noklikšķiniet uz pogas Notīrīt ignorēšanu rindkopu stilu paneļa apakšā vai CMD + klikšķi (CTRL + klikšķis uz datora), lai notīrītu tikai rakstzīmju ignorēšanu, saglabājot visas rindkopu ignorēšanas iespējas.

Lai iegūtu “pastāvīgāku” risinājumu, pārbaudiet, vai šūnai ir piemērots šūnu stils. Ja ir, šim stilam pēc noklusējuma var būt izvēlēts rindkopas stils. Mainiet šūnu stilu vai rindkopas stila iestatījumus pēc saviem ieskatiem.


1 Atbilde 1

Ir daudz situāciju, kad ieliktnis var izraisīt ieraksta bloķēšanu pret ievietotā ieraksta vecāku vai pat pret trešajiem ierakstiem. Piemēram, ievietojot uzdevumu, var bloķēt WhoId, WhatId, un Konta ID .

Ierakstu bloķējošā apkrāptu lapa ir lielisks ceļvedis tam, kādiem jūsu datu aspektiem ir vislielākā iespēja strīdēties par bloķēšanu.

Šīs kļūdas novēršana parasti ir heiristiska - jums ir jāsaprot pamatā esošās problēmas cēlonis un pēc tam jāpiemēro viena vai vairākas metodes, lai samazinātu bloķēšanas risku, taču nav neviena slēdža, kuru varētu izmantot, lai to novērstu.

Divas metodes, kas ir bieži piemērojamas, ir

  • Pasūtiet savus ienākošos datus pēc vecāka ieraksta ID, lai ieraksti dažādās partijās nepretendētu uz vecāku bloķēšanu.
  • Pārliecinieties, vai datu ielādētājs ir konfigurēts tā, lai lielapjoma API izmantotu sērijas režīmā, nevis paralēlajā režīmā.

Daudzos gadījumos (piemēram, ja ierakstam ir tieši viens no vecākiem) jums nebūs jādara abi, tikai viens vai otrs. Tomēr situācijas, kad dati ir ārkārtīgi sagrozīti un ieraksti, kuriem ir vairāki vecāki, ir sarežģītāki.

Atkarībā no situācijas, iespējams, jums būs jāveic radikālākas iejaukšanās, piemēram, jāplāno apkopes logs, lai neļautu lietotājiem pašiem strādāt ar ietekmētajiem ierakstiem, vai atspējojiet aktivizētājus un citu automatizāciju importētajos ierakstos.

Pavadiet kādu laiku ar bloķējošo apkrāptu lapu, lai vispirms noteiktu galveno problēmu, un vispirms izmēģiniet katru no diviem iepriekš minētajiem punktiem, pirms dodaties tik tālu.


1 Atbilde 1

Tuvojoties @crop1645, vispirms ir jāpārliecinās, vai pasūtījumam, ar kuru veicat darbību, ir pievienota cenu grāmata, pirms varat pievienot tam produktus kā pasūtījuma vienumus. Ir iespējams izveidot pasūtījumu, kuram nav pievienota cenu grāmata, jo cenrādi izvēlas pirmo reizi, kad lietotājs pievieno pasūtījumam kādu produktu. Man ir aizdomas, ka pasūtījumam, kas jums neizdodas, vēl nav pievienota cenu grāmata.

Pasūtījumā iekļautajai cenu grāmatai ir jābūt tādai pašai, kādu izmanto arī lauki OrderItems “PricebookEntry”. Ja jūs zināt, ka lietotājs pirms jūsu lapas izmantošanas vienmēr ir noteicis pasūtījuma cenrādi, varat tieši izmantot pasūtījuma lauku Pricebook2Id, piemēram:

Jums ir jāsaglabā Pricebook2Id karte uz PricebookEntry, lai cikla laikā jūs varētu izgūt vēlamo PricebookEntry.

Tomēr, ja jūs zināt, ka vienmēr vēlaties, lai cenu grāmata pasūtījumā tiktu iestatīta pēc jūsu koda, vai tikai tad, ja tā nav iestatīta un jūs vienmēr vēlaties, lai tā būtu standarta, tā ir jākodē.

Tā kā jūs vienmēr pievienojat PricebookEntry no standarta cenrāža, iepriekšējam pirmapstrādes kodam ir jāpārbauda, ​​vai pasūtījuma Pricebook2Id ir standarta.


Man nepieciešama pieeja problēmai novērst ierakstu dublikātu ievietošanu datu bāzē

Tīmekļa pakalpojums, uz kuru es zvanu, atgriež datu sarakstu. Dati no tīmekļa pakalpojuma tiek periodiski atjaunināti, tāpēc, izsaucot tīmekļa pakalpojumu, kas veikts vienas stundas laikā, var tikt atgriezti tie paši dati, kas veikti stundas laikā. Turklāt dati tiek atgriezti, pamatojoties uz sākuma un beigu datumu.

Mums ir vairāki lietotāji, kas var veikt tīmekļa pakalpojumu meklēšanu, un, visticamāk, tiks atgriezti datu dublikāti (īpaši vēsturiskajiem datiem). Tomēr es nevēlos ievietot šos datu dublikātus datu bāzē.

Esmu izveidojis db tabulu, kurā tiek glabāti dati (svarīgākās slejas ir)

Es izmantoju SQL Server 2008 Express ar c# 4.0 un visual studio 2010. Entity Framework tiek izmantots kā ORM. Ja piedāvātajā risinājumā varētu izvairīties no uzglabātām procedūrām, tas būtu plus.

Vēl viens veids, kā izskatīties, interpretējot to, ko es lūdzu risināt, ir šāds: manā tabulā ir miljons unikālu ierakstu. Lietotājs veic jaunu meklēšanu. Lietotāja meklēšanas rezultātos ir aptuveni 300 000 datu ierakstu, kas jau atrodas db. Nepieciešams efektīvs risinājums, lai atrastu un ievietotu tikai unikālos ierakstus.

Datuma, LastUpdate un UserName kombinācija padara ierakstu unikālu.


Nepieciešama palīdzība ar skriptu, lai automātiski ievietotu rindas lapā, pamatojoties uz citām rindām/ citā lapā ievietotajiem datiem

Man ir lapa ar nosaukumu “Raw_Data”, kurā es katru dienu ievietoju datus, ievietojot jaunas rindas virs pēdējās dienas datiem. Man ir vēl viena lapa ar nosaukumu “Overall_Formulas”, kas aizpilda formulas, pamatojoties uz datiem, kas ir lapā “Neapstrādāti dati”. Pašlaik ir masīva formulas, kas aizpilda visas šūnas "Overall_Formulas", kad tiek atjaunināts "Raw_Data". Tomēr es cenšos izvairīties no tā, lai es varētu atgriezties un atsevišķi rediģēt konkrētās šūnas sadaļā "Overall_Formulas". - To nevar izdarīt ar masīva formulām.

Es cenšos paveikt to, kad pievienoju jaunas datu rindas laukam “Raw_Data”, tiek palaists pielāgots skripts un lapā “Overall_Formulas” tiek ievietots tikpat daudz jaunu rindu ar īpašām formulām, kas man ir katrai šūnai.

Piemēram: Pieņemsim, ka es ievietoju 2 jaunas rindas (sākot no 2. rindas) sadaļā "Raw_Data" un pēc tam aizpildīju šīs 2 jaunās rindas ar maniem datiem. No turienes lapas ("Total_Formulas") augšpusē tiks ievietotas arī 2 jaunas rindas (izmantojot onEdit skriptu) ar kolonnām A2: S3, kas aizpildītas ar īpašām formulām katrai šūnai. Katra šūna sadaļā "Overall_Formulas" būtu šāda:


3 atbildes 3

Šī ir komanda, kuru es izmantotu:

Jums, iespējams, nāksies izklaidēties ar cilnēm, lai tas atbilstu jūsu izkārtojumam.

Es domāju, ka man ir tas, ko vēlaties pievienot savam skriptam. Es izveidoju failu ar nosaukumu testfile.txt ar šādu tekstu:

Es to darīju tikai tāpēc, lai tas izskatītos aptuveni kā jūsu fails, un jūs varat to pielāgot savām īpašajām vajadzībām. Šīs komandas (kuras var iekļaut čaulas skriptā) pirms otrā atdalītāja, kas atrodas datu sadaļas beigās, ievietos "jaunu datu ievietošana jaunu datu ievietošana jaunu datu ievietošana". Es saprotu, ka tas ir tas, ko jūs mēģināt darīt.

Pēdējais fails man tagad ir

Tas efektīvi papildina to, ko es saprotu par jūsu problēmu. Lūdzu, paskaidrojiet, vai ir kādi citi stūri, kas jārisina, lai tas būtu pabeigts.

Ņemiet vērā, ka mana regulārā izteiksme ir ļoti vienkārša, lai piespiestu atbilstību līnijai ar visām vienādības zīmēm, un tiek pieņemts, ka fails ir “labi izturējies”. Ja faila saturs var atšķirties (piemēram, ja rindā bez norobežotāja var būt vienādas zīmes), iespējams, vēlēsities precīzāku regulāro izteiksmi. Es uzskatu, ka jūsu jautājums nozīmē, ka jūs pats varat uzrakstīt regulāro izteiksmi un nepieciešama palīdzība, lai iegūtu otro maču. Ņemiet vērā arī to, ka es pieņēmu, ka jūs vēlaties tikai otro maču un vienmēr būs tieši 2.

Pirmā komanda saglabā visus rindu numurus, kas atbilst modelim mainīgo līnijās. Otrā komanda no mainīgajām līnijām attīra kaut kādu sliktu rakstzīmi (es neesmu pārliecināts par to), lai tā būtu ierobežota ar atstarpi. Trešā komanda saglabā katru atbilstošo rindas numuru savā mainīgajā (šeit es pieņemu, ka ir tieši 2 atbilstības). Ceturtais ievieto otros vēlamos datus pirms otrās spēles.


Pirms turpināt, jāsaka sekojošais.

Nopietni. Jau desmit gadus ir bijuši ļoti labi aizstājēji. Un, ņemot vērā, ka šķiet, ka šis kods neko neizbēga, jums būtu labi iemācīties izmantot parametrētus vaicājumus, lai tas nebūtu jādara.

Tomēr, ņemot vērā visu iepriekš minēto, SQL varētu pat nebūt vajadzīgs. Vai ir kāds labs iemesls, kāpēc jūs neizmantojat wp_insert_post, lai ievietotu ziņu? Šķiet, ka tas ļauj iestatīt visu, ko vēlaties iestatīt, un pēc tam dažus. Tas arī atgriež ziņas ID, tāpēc jums pat nav jāpieskaras datu bāzei, lai to iegūtu.

Izklausās, ka problēma nav SQL vai WordPress. Šim kodam nevajadzētu būt tik lēnam, kā jūs aprakstāt. Ja jums ir DB serveris, kas nav jūsu tīmekļa serveris (kas parasti notiek koplietošanas mitināšanā un tamlīdzīgi), tad, protams, būs neliels palēninājums. Parasti nē ka daudz kavēšanās, ja vien DB nav izvietots pilnīgi citā vietā (ti, nevis no jūsu tīmekļa mitināšanas uzņēmuma). Tas un iespēja, ka serveris (DB vai tīmekļa serveris, vai nu viens) ir vienkārši pārslogots, ir lielākas iespējas.


Iestatot satursTikai uz nepatiesu tiks iegūta standarta kopija. Iestatot vērtību Patiesa, tiks ielīmētas tikai vērtības. Atrastā skripta piemērs ir daudz vairāk nekā vērtību ielīmēšana.

Esmu izveidojis jums piemēra failu: Pievienojiet rindu ar formulām

Šī ArrayFormula var darīt to pašu, neiesaistot skriptu. Ievadiet to D4, un tas tiks automātiski pārnests uz jebkuru tukšo šūnu daudzumu zem tā.

Piezīmes: "B4: B" nozīmē - apskatiet visas šūnas, sākot no B4 līdz kolonnas beigām.

Kamēr ArrayFormula rūpējas par kopēšanu šūnās zem tā. Vienkārši pārliecinieties, vai šūnas zem tā ir tukšas.

Ja jums ir jāpievieno jauna rinda augšpusē (pirmā rinda) un jākopē formula no pirmās augšējās rindas, formulas ir jākopē, izmantojot funkcijas getFormulas () un setFormulas (). Jūs varat mainīt pirmās rindas vērtību uz 2, ja jūsu izklājlapai ir, piemēram, galvenes.


Šim nolūkam SObject varat izmantot addError metodi, Apex Developers rokasgrāmatas tēma Aktivizētāja izņēmumi sāk aprakstīt procesu un saites uz citām tēmām, kas apraksta šo pieeju.

Iezīmē ierakstu ar pielāgotu kļūdas ziņojumu un novērš jebkādu DML darbību.

Ņemiet vērā, ka laukam varat izmantot arī metodes addError izsaukumu. Tas arī bloķēs ieraksta ievietošanu un sniegs lietotājam plašāku kontekstu par to, kāda lauka vērtība rada problēmu.

Šeit ir paraugs, kurā parādīta atšķirība starp ieraksta līmeņa un lauka līmeņa izmantošanu addError

Drošības piezīme: Ja jūs uztraucaties par to, ka jūsu objektam tiek pievienoti citi Apex aktivizētāji un tiek mainītas jūsu lauku vērtības. Jums jāapsver validācijas veikšana aktivizētāja pēcfāzē, jo tikai tad varat nodrošināt, ka lietotājs vai citi klienta pievienotie Apex aktivizētāji (ja izstrādājat iepakotu risinājumu) vai citi jūsu laukos netiks veiktas nekādas izmaiņas. izstrādātājiem.

Atjaunināt: Kopš tā laika esmu uzrakstījis emuāru par praksi apsvērt apstiprināšanu jūsu aktivizētāja pēcfāzē.